Использование r barplot () для отображения сгруппированных данных - PullRequest
0 голосов
/ 06 июня 2018

Я хочу сгенерировать из dd1 график, как показано ниже, используя только базовый график функции R, чтобы группировка по годам для каждой страны.Я могу сделать это с помощью ggplot, но не могу определить правильный способ заставить его работать, используя barplot.

enter image description here

Входной фрейм данных:

dd1 <- data.frame ("yr" = c (2001,2002,2001,2002), "страна" = c ("Чили", "Китай", "Чили", "Китай"), "торговля" = c (1200,2400,2500,5000)) </p>

1 Ответ

0 голосов
/ 06 июня 2018

Просто превратите ваш фрейм данных в сгруппированную матрицу, используя tapply на год и страну :

graph_data <- tapply(dd1$trade, list(dd1$yr, dd1$country), sum)

barplot(graph_data, beside=TRUE, col=rainbow(3),
        legend=rownames(graph_data), ylim=c(0,30000000), ylab="Trade", xlab="Country")

Для демонстрации с большим фреймом данных азиатских странсо случайными данными:

asia_countries <- c("China", "India", "Indonesia", "Pakistan", "Bangladesh", "Japan", "Philippines", "Viet Nam", 
                    "Iran", "Turkey", "Thailand", "Myanmar", "South Korea", "Iraq", "Afghanistan", 
                    "Saudi Arabia", "Uzbekistan", "Malaysia", "Nepal", "Yemen", "North Korea", 
                    "Sri Lanka", "Kazakhstan", "Syria", "Cambodia", "Azerbaijan", "Jordan", 
                    "United Arab Emirates", "Tajikistan", "Israel", "Laos", "Kyrgyzstan", "Lebanon", 
                    "Turkmenistan", "Singapore", "State of Palestine", "Oman", "Kuwait", 
                    "Georgia", "Mongolia", "Armenia", "Qatar", "Bahrain", "Timor-Leste", "Cyprus", 
                    "Bhutan", "Maldives", "Brunei")

set.seed(662018)
dd1 <- transform(expand.grid("yr" = c(2014:2016),
                             "country" = asia_countries), 
                 "trade"= sample(2000:20000, 144, replace=TRUE))

graph_data <- tapply(dd1$trade, list(dd1$yr, dd1$country), sum)

# PASS LENGTH OF LEGEND SERIES (I.E. YEARS) INTO rainbow(n)
barplot(graph_data, beside=TRUE, col=rainbow(3), legend=rownames(graph_data), 
        ylim=c(0,20000), ylab="Trade", xlab="Country")

Bar Plot Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...