如何避免气泡图中的气泡重叠?

How to avoid over lapping bubbles in bubble plot?

我想像右图那样在气泡图中单独绘制数据(我在 PowerPoint 中制作这个只是为了可视化)。 目前我只能创建一个看起来像左侧气泡重叠的图。我如何在 R 中执行此操作?

b <- ggplot(df, aes(x = Year, y = Type))

b + geom_point(aes(color = Spp, size = value), alpha = 0.6) +
  scale_color_manual(values = c("#0000FF", "#DAA520",  "#228B22","#E7B888")) +
  scale_size(range = c(0.5, 12)) 

您可以在 geom_point 中使用 position_dodge() 参数。如果你直接在你的代码上应用它,它会以水平方式定位点,所以我的想法是切换你的 x 和 y 变量并使用 coord_flip 以正确的方式获得它:

library(ggplot2)
ggplot(df, aes(y = as.factor(Year), x = Type))+ 
  geom_point(aes(color = Group, size = Value), alpha = 0.6, position = position_dodge(0.9)) +
  scale_color_manual(values = c("#0000FF", "#DAA520",  "#228B22","#E7B888")) +
  scale_size(range = c(1, 15)) +
  coord_flip()

它看起来像你想要达到的目标吗?


编辑:在每个点的中间添加文本

要为每个点添加标签,您可以使用 geom_text 并设置与 geom_point 相同的 position_dodge2 参数。

注意:我使用 position_dodge2 而不是 position_dodge 并略微更改宽度值,因为我发现 position_dodge2 更适合这种情况。

library(ggplot2)
ggplot(df, aes(y = as.factor(Year), x = Type))+ 
  geom_point(aes(color = Group, size = Value), alpha = 0.6, 
             position = position_dodge2(width  = 1)) +
  scale_color_manual(values = c("#0000FF", "#DAA520",  "#228B22","#E7B888")) +
  scale_size(range = c(3, 15)) +
  coord_flip()+
  geom_text(aes(label = Value, group = Group), 
            position = position_dodge2(width = 1))

可重现的例子

由于您没有提供可重现的示例,我制作了一个可能不能完全代表您的原始数据集的示例。如果我的回答不适合你,你应该考虑提供一个可重现的例子(见这里:How to make a great R reproducible example

Group <- c(LETTERS[1:3],"A",LETTERS[1:2],LETTERS[1:3])
Year <- c(rep(1918,4),rep(2018,5))
Type <- c(rep("PP",3),"QQ","PP","PP","QQ","QQ","QQ")
Value <- sample(1:50,9)
df <- data.frame(Group, Year, Value, Type)
df$Type <- factor(df$Type, levels = c("PP","QQ"))