Интегрированная версия двух полярных участков, наложенных и сложенных в R
Недавно я обнаружил эту визуализацию связи между ожирением и голодом с помощью JESS3: http://jess3.com/obesity-and-hunger-infographic/
Поскольку мне нравится соотношение информации и пространства, я попытался придумать похожий график в R (т. Е. Полярный график с точками рассеяния в центре, а в конце центра столбчатая диаграмма с накоплением начинается с новой оси от 0 к х. Однако я не нашел способа реализовать стек различных версий polarplot в plotrix или ggplot2.
Чтобы проиллюстрировать, как в очень простой версии должны выглядеть два отдельных графика, я создал простой пример с пакетом mtcars:
library(plotrix)
##load mtcars as example dataset
d.raw <- mtcars
## draw inner polar plot with scatter plot for mpg
polar.plot(d.raw$mpg, clockwise=TRUE, rp.type="s", start=90)
#### draw additional polar plot (which should be added outside of first plot in the end) as stacked bar chart with hp and a fictitious added column with random values between 1 and 100%
##come up with percentages and multiply the with hp bar to get a random stacked bar of hp and this
d.raw$fict <- sample(100,32)*0.01
d.raw$hpshare <- d.raw$fict*d.raw$hp
## draw plot (first the hp and then add on top a second layer with the share of hp)
polar.plot(d.raw$hp, clockwise=TRUE, rp.type="r", lwd=5, line.col=2, start=90, radial.lim=c(0,350))
par(new=T)
polar.plot(d.raw$hpshare, clockwise=TRUE, rp.type="r", lwd=5, line.col=4, start=90, radial.lim=c(0,350))
Возможно ли, и если да, то как мне добиться, чтобы новая ось начиналась и столбцы добавлялись за пределы диаграммы рассеяния?
Заранее большое спасибо, все советы очень ценятся!
1 ответ
Пусть этот уродливый хак вдохновит вас, но серьезно придерживайтесь js + photoshop для такого рода высококачественной / креативной графики.
library(reshape2)
library(ggplot2)
cake = data.frame(y = -1*abs(rnorm(100)), x = runif(100,-5, 5), g = sample(1:4, 100, replace = T))
pie = data.frame(x = runif(100, -5, 5), g = sample(1:4, 100, replace = T))
ggplot() + geom_bar(data = pie, aes(x, fill = factor(g)), position = "stack") +
geom_point(data = cake, aes(x,y, color = factor(g))) + geom_text(aes(x=-0.5,y=2), label = "Cake is pie", angle = 110) + coord_polar()