ggplot2密度图图例显示错误的组名和错误的颜色

Posted

技术标签:

【中文标题】ggplot2密度图图例显示错误的组名和错误的颜色【英文标题】:ggplot2 density plot legend shows wrong group names and wrong colors 【发布时间】:2020-05-08 22:31:41 【问题描述】:

以下代码绘制了来自两个不同长度的独立数据帧的两个部分重叠的密度分布。

library(ggplot2)
#Define colors to be used in plot for each group
mycolRO <- rgb(0.8, 0.2, 0, max = 1, alpha = 0.5) #Color for Group "Road"
mycolRA <- rgb(0.2, 0.6, 0.4, max = 1, alpha = 0.5)    #Color for Group "Rail"

#Create some data
dfRoad <- data.frame(DiffRO=2+rnorm(300))
dfRail <- data.frame(DiffRA=rnorm(500))

#Plot density distributions
  ggplot() +
  geom_density(aes(x=DiffRO, fill = mycolRO, alpha=0.5), data=dfRoad) +
  geom_density(aes(x=DiffRA, fill = mycolRA, alpha=0.5), data=dfRail) +
  xlim(-6, 6) +
  theme_classic() +
  ggtitle("") +
  xlab("Value") +
  ylab("Density") +
  theme(plot.title = element_text(color="black", size=17, face="bold"),
  axis.title.x = element_text(color="black", size=17, face="bold"),
  axis.title.y = element_text(color="black", size=17, face="bold"),
  axis.text=element_text(size=15))+
  labs(fill = "Group")+
  theme(legend.title = element_text(color = "black", size = 15), legend.text = element_text(color = "black", size=12))+
  theme(legend.position = c(0.2,0.8), legend.direction = "vertical")+
  guides(alpha=FALSE)


图例确实显示了正确的基色,但不是上面定义的透明度 (alpha) 值,它应该是 alpha=0.5。 此外,我希望看到正确的变量名称(“DiffRO”和“DiffRA”)作为图例条目而不是颜色代码。

感谢您的帮助。

【问题讨论】:

***.com/questions/5290003/… 【参考方案1】:

这里有两种做你想做的事的方法。 两者的共同点是:

    颜色是用scale_fill_manual手动设置的。 theme 调用被简化,无需重复调用theme

首先,我将重新创建数据,这次在调用 rnorm 之前设置 RNG 种子。

set.seed(1234)
dfRoad <- data.frame(DiffRO = 2 + rnorm(300))
dfRail <- data.frame(DiffRA = rnorm(500))

你的方式,更正了。

图例标签也必须在scale_fill_manual中手动设置。

#Plot density distributions
ggplot() +
  geom_density(aes(x=DiffRO, fill = mycolRO, alpha=0.5), data=dfRoad) +
  geom_density(aes(x=DiffRA, fill = mycolRA, alpha=0.5), data=dfRail) +
  xlim(-6, 6) +
  ggtitle("") +
  xlab("Value") +
  ylab("Density") +
  scale_fill_manual(labels = c("Road", "Rail"),
                    values = c(mycolRO, mycolRA)) +
  theme_classic() +
  theme(plot.title = element_text(color="black", size=17, face="bold"),
        axis.title.x = element_text(color="black", size=17, face="bold"),
        axis.title.y = element_text(color="black", size=17, face="bold"),
        axis.text=element_text(size=15),
        legend.title = element_text(color = "black", size = 15), 
        legend.text = element_text(color = "black", size=12),
        legend.position = c(0.2,0.8), legend.direction = "vertical")+
  labs(fill = "Group") +
  guides(alpha = FALSE)

另一种方式,更简单。

仅在一个数据集中将两个不同数据集的数据组合和重组。为此,我使用包reshape2

dflong <- reshape2::melt(dfRoad)
dflong <- rbind(dflong, reshape2::melt(dfRail))

请注意,现在只需调用一次geom_density,并且图例标签是自动的。

ggplot(dflong, aes(x = value, group = variable, fill = variable, alpha = 0.5)) +
  geom_density() +
  xlim(-6, 6) +
  ggtitle("") +
  xlab("Value") +
  ylab("Density") +
  scale_fill_manual(values = c(mycolRA, mycolRO)) +
  theme_classic() +
  theme(plot.title = element_text(color="black", size=17, face="bold"),
        axis.title.x = element_text(color="black", size=17, face="bold"),
        axis.title.y = element_text(color="black", size=17, face="bold"),
        axis.text = element_text(size=15),
        legend.title = element_text(color = "black", size = 15), 
        legend.text = element_text(color = "black", size=12),
        legend.position = c(0.2,0.8), legend.direction = "vertical") +
  labs(fill = "Group") +
  guides(alpha = FALSE)

【讨论】:

@Rui Barradas:感谢 scale_fill_manual 的提示。这对我帮助很大!但是,我不得不稍微更改 scale_fill_manual 语句以产生所需的结果: scale_fill_manual(labels = c("Road", "Rail"), values = adjustcolor(c(mycolRO, mycolRA), alpha.f=0.33))

以上是关于ggplot2密度图图例显示错误的组名和错误的颜色的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2:图例混合颜色和隐藏线用于预测图

带有颜色和图例的简单 ggplot2 情况

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(改变图例位置移除图例)实战(density plot)

使用ggplot2在叠加密度图中重复图例

在ggplot2中强制密度图的颜色

R语言ggplot2可视化热力图(密度图)并使用scale_fill_continuous函数自定义图像的色彩梯度(colour gradient)自定义设置图例中的色彩梯度反序(reverse)