Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R “堆叠气泡图”;“底部对齐”;_R_Ggplot2_Visualization_Bubble Chart - Fatal编程技术网

R “堆叠气泡图”;“底部对齐”;

R “堆叠气泡图”;“底部对齐”;,r,ggplot2,visualization,bubble-chart,R,Ggplot2,Visualization,Bubble Chart,编程新手和首次发布 我正试图创建一个堆叠的气泡图来显示人口是如何分解成它的比例的。我的目标是将其作为函数编写,以便可以轻松地重复使用,但在将其转换为函数之前,我需要对代码的内容进行排序 这是我想要的绘图类型: 这是我迄今为止尝试过的代码: library(ggplot2) # some data observations = c(850, 500, 200, 50) plot_data = data.frame( "x" = rep.i

编程新手和首次发布

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

这是我想要的绘图类型:

这是我迄今为止尝试过的代码:

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")     
这将生成一个bullseye类型的图像

我的方法是尝试计算出圆半径的计算方法,然后为每个条目更新for循环中的y值,以便所有圆都接触到底部-这是我失败的地方

因此,我的问题是: 如何计算每个圆的y坐标


感谢您的帮助和提示。

我认为这简化了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

circle ggplo2是一项要求吗?这很容易使用
plotrix::draw.circle
可能的重复也很相关:最后一个对@Henrik非常有用。好发现!如果该代码对您有效,那么如果您在其上勾选“接受”,它将帮助其他人找到该代码。