2016-12-22 9 views
0

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

Было бы идеально, если бы страны, например, где продолжительность жизни от 50 до 70 имели желтый цвет бара, 70-80 - красный и 80-90 - зеленый.

Вот мой код:

data("focusgroup") 
par(mar = c(6,4,1,1)) 
x <- focusgroup[order(focusgroup$GDP), ] 
x$color[x$`LE Both Sexes`== 55] <- 1 
x$color[x$`LE Both Sexes`==77] <- 2 
x$color[x$`LE Both Sexes`==77] <- 3 
with(x, barplot(GDP, names.arg = x$Country, las = 2, cex.axis = 0.6, cex.lab = 0.8, cex = 0.6, col = color)) 

здесь образец данных Фокус-группа: структура (страна = с ("Южная Африка", "Свазиленд", "Ботсвана", "Лесото", " Намибия »,« Швеция »,« Норвегия »,« Соединенное Королевство »,« Дания », « Эстония »,« Финляндия »,« Исландия »,« Ирландия »,« Латвия »,« Литва », « Новая Зеландия », «Австралия», «Южная Корея», «Северная Корея», «Китай», «Япония», «Монголия», «Мексика», «Коста-Рика», «Сальвадор», «Гватемала», «Гондурас», , "Панама", "Никарагуа"), ВВП = c (10700, 4500, 14000, 1700, 6900, 39100, 54600, 34800, 36600, 19100, 35400, 38300, 37300, 14700, 16000, 27700, 41000, 30000, 1800, 7600, 34000, 3600, 13900, 11300, 7200 , 5200, 4200, 13000, 3000), Население = c (54490, 1287, 2262, 2135, 2459, 9779, 5211, 64716, 5669, 1313, 5503, 329, 4688, 1971, 2878, 4529, 23969, 50293 , 25155, 1383925, 126573, 2959, 127017, 4808, 6127, 16343, 8075, 3929, 6082), LE Male = c (59,3, 56,6, 63,3, 51,7, 63,1, 80,7, 79,8, 79,4, 78,6, 72,7, 78,3, 81,2, 79,4, 69,6, 68,1, 80, 80,9, 78,8, 67, 74,6, 80,5, 64,7, 73,9, 77,1, 68,8, 68,5, 72,3, 74,7, 71,5), LE Both Sexes = c (62,9, 58,9, 65,7 , 53,7, 65,8, 82,4, 81,8, 81,2, 80,6, 77,6, 81,1, 82,7, 81,4, 74,6, 73,6 , 81.6, 82.8, 82.3, 70.6, 76.1, 83.7, 68.8, 76.7, 79.6, 73.5, 71.9, 74.6, 77.8, 74.8)), .Names = c ("", "Страна", "ISO", "Регион », « Субрегион »,« Скорость убийства »,« Граф »,« ВВП »,« GPI »,« percent_non_religious », « Население »,« Мужчины LE »,« LE Female »,« LE Both Sexes ») row.names = c (NA, 29L), class = c ("tbl_df", "tbl", "data.frame"))

Спасибо заранее!

+0

Не могли бы вы пожалуйста, используйте 'dput()', чтобы дать нам образец данных в 'focusgroup' – G5W

+0

добавил к вопросу – Ekaterina

ответ

1

Вот один из подходов, использующий ggplot2 и определяющий цвет штриховых знаков с помощью аргумента «fill». Обратите внимание, что я решил повернуть ориентацию оси.

library(ggplot2) 

### read data 
dat <- data.frame(Country = c("South Africa", "Swaziland", "Botswana", "Lesotho", "Namibia", "Sweden", "Norway", "United Kingdom", "Denmark", "Estonia", "Finland", "Iceland", "Ireland", "Latvia", "Lithuania", "New Zealand", "Australia", "South Korea", "North Korea", "China", "Japan", "Mongolia", "Mexico", "Costa Rica", "El Salvador", "Guatemala", "Honduras", "Panama", "Nicaragua"), 
        GDP = c(10700, 4500, 14000, 1700, 6900, 39100, 54600, 34800, 36600, 19100, 35400, 38300, 37300, 14700, 16000, 27700, 41000, 30000, 1800, 7600, 34000, 3600, 13900, 11300, 7200, 5200, 4200, 13000, 3000), 
        Population = c(54490, 1287, 2262, 2135, 2459, 9779, 5211, 64716, 5669, 1313, 5503, 329, 4688, 1971, 2878, 4529, 23969, 50293, 25155, 1383925, 126573, 2959, 127017, 4808, 6127, 16343, 8075, 3929, 6082), 
        LE_Male = c(59.3, 56.6, 63.3, 51.7, 63.1, 80.7, 79.8, 79.4, 78.6, 72.7, 78.3, 81.2, 79.4, 69.6, 68.1, 80, 80.9, 78.8, 67, 74.6, 80.5, 64.7, 73.9, 77.1, 68.8, 68.5, 72.3, 74.7, 71.5), 
        LE_Both_Sexes = c(62.9, 58.9, 65.7, 53.7, 65.8, 82.4, 81.8, 81.2, 80.6, 77.6, 81.1, 82.7, 81.4, 74.6, 73.6, 81.6, 82.8, 82.3, 70.6, 76.1, 83.7, 68.8, 76.7, 79.6, 73.5, 71.9, 74.6, 77.8, 74.8)) 

Мы можем либо использовать непрерывные значения в переменной продолжительности жизни, чтобы определить цвет заливки прутья ...

ggplot(dat, aes(x=reorder(Country, GDP), y=GDP, fill=LE_Both_Sexes)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    xlab("Country") 

... или же классы использования, которые мы сначала должны создать в нашем data.frame. Для генерации вектора с уровнями факторов, представляющих наши классы, мы можем использовать cut.

dat$LE_class <- cut(dat$LE_Both_Sexes, breaks=c(50,70,80,90), labels=c("50-70", "70-80", "80-90")) 

ggplot(dat, aes(x=reorder(Country, GDP), y=GDP, fill=LE_class)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    xlab("Country")+ 
    scale_fill_manual(values = c("yellow", "red", "green")) # here's where you define the colors of the classes 
#(imho I would suggest reordering them, as c("red", "yellow", "green") seems more intuitive 

 Смежные вопросы

  • Нет связанных вопросов^_^