Работа с цветовой шкалой в R (пузырьковая диаграмма в стиле Рослинга)

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

Во всяком случае, моя проблема в том, что я работаю с пузырьковой диаграммой в стиле Рослинга, и цвета не меняются правильно. На графике представлены данные о новых альянсах Китая и MIDS (милитаризованных межгосударственных спорах). В частности, размер круга указывает количество MIDS от 1 до 7. Поскольку область может быть трудно различима, я решил также использовать цвет, чтобы лучше различать # MIDS, как показывает легенда.

Легенда правильно показывает мою цветовую схему, однако вы можете заметить, что кружки большего размера не темно-красные, как должны быть, и при этом все самые маленькие кружочки не самого светлого цвета. На самом деле, некоторые маленькие и некоторые большие круги темно-красные, и то же самое верно для светло-желтого. У меня есть мой код и другие подробности ниже.

МОЙ КОД:

library(RColorBrewer)
my.colors99 <-colorRampPalette(c("#ffffcc", "#fd8d3c", "#800026"))(8)
my.design <- my.colors99[ChnData$mids]   

radius1 <- sqrt( ChnData$mids/pi )


symbols ( ChnData$year, ChnData$alliances,
circles= radius1, inches=.35,
xlab = "Year", ylab = "New Alliances", 
main = "China's New Alliances (Circles = MIDS)",
ylim=nrow(ChnData$alliances),
xlim= nrow(ChnData$year), 
bg = my.colors99)

legend("topleft", 
legend=c("0", "1", 
"2", "3", 
"4", "5", 
"6", "7"), title= "# of Mids",
col=my.colors99, pch=19, cex=1, box.col="grey60", 
text.col="grey30")

Некоторые подробности о цветах

my.colors99 in R returns:

"#FFFFCC" "#FEDEA2" "#FDBD79" "#FD9D50"

"#EB7838" "#C75032" "#A3282C" "#800026"

ChnData$MIDS in R returns:

"#FFFFCC" "#FEDEA2" "#FFFFCC" "#FFFFCC" "#FFFFCC" "#FFFFCC" "#FFFFCC"
"#FFFFCC" "#FFFFCC" "#FEDEA2" "#FFFFCC" "#FFFFCC " "#FFFFCC" "#FFFFCC"
"#FFFFCC" "#FFFFCC" "#FDBD79" "#FFFFCC" "#FEDEA2" "#FFFFCC" "#FFFFCC"
"#FFFFCC" "#FFFFCC " "#FFFFCC" "#FFFFCC" "#FEDEA2" "#FEDEA2" "#FEDEA2"
"#FDBD79" "#FFFFCC" "#FD9D50" "#FFFFCC" "#FEDEA2" "#FFFFCC" "# FFFFCC"
"#FFFFCC" "#FD9D50" "#FFFFCC" "#FFFFCC" "#FFFFCC" "#FEDEA2" "#FFFFCC"
"#FDBD79" "#FFFFCC" "#FEDEA2" "# FFFFCC" "#FEDEA2" "#FFFFCC" "#FEDEA2"
"#FFFFCC" "#FDBD79" "#FD9D50" "#FEDEA2" "#FFFFCC" "#FD9D50" "#EB7838"
"# FDBD79" "#A3282C" "#FFFFCC" "#EB7838" "#EB7838" "#FDBD79" "#FDBD79"
"#C75032" "#FFFFCC" "#FD9D50" "#C75032" "#FD9D50" " #EB7838" "#FDBD79"
"#FD9D50" "#FFFFCC" "#FFFFCC" "#FEDEA2" "#FD9D50" "#FFFFCC" "#FFFFCC"
"#FFFFCC" "#FDBD79" " #FDBD79" "#FFFFCC" "#FFFFCC" "#FEDEA2" "#FEDEA2"
"#FFFFCC" "#FDBD79" "#FDBD79" "#FDBD79" "#FEDEA2" "#FFFFCC" "#FD9D50"
"#FD9D50" "# EB7838" "#FDBD79" "#FFFFCC" "#FEDEA2" "#FDBD79" "#EB7838"
"#FDBD79" "#EB7838" "#FEDEA2" "#FDBD79" "#FEDEA2" "#FDBD79" " #EB7838"

Мне кажется, что цветовая схема определенно неверна, так как я, конечно, хочу, чтобы самые маленькие круги, которые представляют наименьшее количество средних частот, соответствовали самому светлому цвету в палитре рампы и темнели по мере увеличения размера круга. Надеюсь, я предоставил достаточно подробностей, но буду рад ответить на любые вопросы, если потребуется дополнительная информация. Спасибо за помощь!

myplotgraphicмаленькие кружки, цветовая схема правильная с 1-средними, но легенда неправильная


person Robborino    schedule 23.04.2016    source источник


Ответы (1)


Это именно тот тип графика, где ggplot2 намного проще в использовании, чем базовая графика.

require(ggplot2)
ggplot(ChnData, aes(x = year, y = alliances, col = mids, size = mids)) + 
  geom_point() +
  scale_colour_distiller(palette = "OrRd", direction  = -1) +
  scale_size(range = c(2, 12)) +
  labs(y = "New Alliances", title = "China's New Alliances (Circles = MIDS)")

Я подозреваю, что проблема с вашим кодом в том, что my.colors99[ChnData$mids] не делает того, что вы ожидаете. Когда средние частоты равны нулю, они будут отброшены. Остальные значения будут неуместны.

person Richard Telford    schedule 23.04.2016
comment
Большое спасибо! Я довольно долго боролся с этим, и вы очень хорошо упростили, так что я ценю это. Если вы не возражаете, как я могу изменить несколько мелких деталей. Я хочу увеличить масштаб всех кругов (выполнение size = mids * 10 повлияло только на легенду, а не на фактический размер круга) и как изменить цветовую схему (в настоящее время больше MIDS относится к более светлым, а не к более темным кругам). Я попробовал col = 1-mids, и это сработало для переворачивания цветов, но также повлияло на легенду, сделав все значения, которые я буду демонстрировать в ОП. - person Robborino; 24.04.2016
comment
отредактированный ответ, чтобы увеличить размеры и изменить направление цветовой шкалы - person Richard Telford; 24.04.2016