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

时间:2020-01-22 17:30:49

标签: r ggplot2 legend legend-properties

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

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”)作为图例条目,而不是颜色代码。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这是您想要做的两种方式。
两者的共同点是:

  1. 使用scale_fill_manual手动设置颜色。
  2. 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)

enter image description here