气泡图,唯一的指标是大小和颜色

问题描述 投票:0回答:1

我想制作如下图所示的气泡图。

我的想法是有一个 ggplot 风格的气泡图,我真正想要控制的是图表的大小和颜色,而不是真正控制位置。气泡应该以指定的半径相互簇拥,以防止它们接触。

是否有特定的 ggplot 函数或 R 包可以为我做这个?我确定可以使用 geom_point() 来制作一个,但必须想象有一种更简单的方法,我宁愿在一天中的这个时候不做触发。

任何指示?

另一个解决方案可能是使用物理学。让所有气泡通过“重力”相互吸引,然后在它们彼此靠得太近时停止。这可能意味着涉及的数学更少。即使有一个包,由比我更擅长工作类型的人快速编码的版本也很高兴看到。

输入应该是这样的:

birds <- c("Eagle", "Owl", "Falcon", "Ostrich", "Blue Jay", "Chaffinch")
values <- c(43, 23, 54, 112, 16, 12)

df <- data.frame(birds, values)

编辑:我确定这将被标记为重复问题,但我已经尽我最大的努力在网上和堆栈上找到我要找的东西,但我还没有找到。如果您确定重复,请仅将其标记为重复。如果您不确定,请让其他人回答。

r ggplot2 bubble-chart
1个回答
1
投票

使用@JonSpring 评论的圆形包装库,代码从文档中修改

df <- data.frame(birds = c("Eagle", "Owl", "Falcon", "Ostrich", "Blue Jay", "Chaffinch"),
                 values = c(43, 23, 54, 112, 16, 12))

library(ggplot2)
install.packages("packcircles")
library(packcircles)

df$packing <- circleProgressiveLayout(df$values, sizetype='area')

df.gg <- circleLayoutVertices(df$packing, npoints=50)

ggplot() + 
  geom_polygon(data = df.gg, aes(x, y, group = id, fill=id), alpha = 0.6)+
  scale_fill_viridis_c()+
  geom_text(data = df, aes(x=packing$x, y=packing$y, label = birds), size=5, color="black") +
  theme_void() + 
  theme(legend.position="none", plot.margin=unit(c(0,0,0,0),"cm") ) + 
  coord_equal()

原答案:

从重构问题的角度来看,

wordcloud
库可以避免文本重叠:

df <- data.frame(birds = c("Eagle", "Owl", "Falcon", "Ostrich", "Blue Jay", "Chaffinch"),
                 values = c(43, 23, 54, 112, 16, 12))
install.packages("wordcloud")
library(wordcloud)
wordcloud(df$birds, df$values, colors=brewer.pal(8,"Dark2"))

© www.soinside.com 2019 - 2024. All rights reserved.