如何避免气泡图中的气泡重叠?
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"))
我想像右图那样在气泡图中单独绘制数据(我在 PowerPoint 中制作这个只是为了可视化)。
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"))