堆积气泡图,“底部对齐”

时间:2015-07-26 10:05:10

标签: r ggplot2 visualization bubble-chart

新编程和第一次发布。

我正在尝试创建一个堆叠的气泡图,以显示人口如何分解其比例。我的目的是将其作为一个函数编写,以便我可以轻松地重复使用它,但我需要在将代码转换为函数之前对其进行排序。

这是我想要的情节类型: enter image description here

这是我到目前为止尝试过的代码:

library(ggplot2)

# some data
observations = c(850, 500, 200, 50)
plot_data = data.frame(
                    "x"         = rep.int(1,length(observations))
                   ,"y"         = rep.int(1,length(observations))
                   , "size"     = rep.int(1,length(observations))
                   ,"colour"    = c(1:length(observations)) 
                   )

# convert to percentage for relative sizes
for (i in 1:length(observations)) 
                {
                plot_data$size[i] = (observations[i]/max(observations))*100
                }

ggplot(plot_data,aes(x = x, y = y)) +
  geom_point(aes(size = size, color = colour)) +
  scale_size_identity() +
  scale_y_continuous (limits = c(0.5, 1.5)) +
  theme(legend.position = "none")     

这会产生靶心型图像。

我的方法是尝试计算如何计算圆半径,然后更新每个条目的for循环中的y值,使得所有圆圈都触及底部 - 这就是我失败的地方。

所以我的问题: 我如何计算出每个圆圈的y坐标是什么?

感谢您提供任何帮助和提示。

1 个答案:

答案 0 :(得分:0)

我认为这简化了Henrick找到的答案:

circle <- function(center, radius, group) {
  th <- seq(0, 2*pi, len=200)
  data.frame(group=group,
             x=center[1] + radius*cos(th),
             y=center[2] + radius*sin(th))
}

# Create a named vector for your values
obs <- c(Org1=500, Org2=850, Org3=50, Org4=200)

# this reverse sorts them (so the stacked layered circles work)
# and makes it a list
obs <- as.list(rev(sort(obs)))

# need the radii
rads <- lapply(obs, "/", 2)

# need the max
x <- max(sapply(rads, "["))

# build a data frame of created circles
do.call(rbind.data.frame, lapply(1:length(rads), function(i) {
  circle(c(x, rads[[i]]), rads[[i]], names(rads[i]))
})) -> dat

# make the plot

gg <- ggplot(dat)
gg <- gg + geom_polygon(aes(x=x, y=y, group=group, fill=group), 
                        color="black")
gg <- gg + coord_equal()
gg <- gg + ggthemes::theme_map()
gg <- gg + theme(legend.position="right")
gg

enter image description here

您可以使用标准的ggplot功能调整指南/颜色。