将图例添加到组合的线和条形图 ggplot

Posted

技术标签:

【中文标题】将图例添加到组合的线和条形图 ggplot【英文标题】:Adding a legend to a combined line and bargraph ggplot 【发布时间】:2020-12-02 15:39:38 【问题描述】:

所以我知道很多人都问过类似的问题,但其他人使用的代码似乎不适用于我的图表,因此为什么我想知道我是否做错了什么。

我有这个代码:

ggplot(dfMonth) 
+ geom_col(aes(x=Month, y=NumberMO), size=.7, colour="black", fill="white") 
+ geom_line(aes(x=Month, y=NumberME), size=1, colour="black", group=1)  
+ xlab("Month") 
+ ylab("No. of birds observed") 
+ theme_bw() 
+ geom_point(x=Month, y=NumberME) 
+ scale_colour_manual("" ,values =c("NumberME"="black"), labels=c("Expected No. of birds")) 
+ theme(legend.key=element_blank(),legend.title=element_blank(), legend.box="horizontal") 
+ theme(axis.title.x = element_text(margin = unit(c(5, 0, 0, 0), "mm")),
                  axis.title.y = element_text(margin = unit(c(0,3 , 0, 0), "mm"))) 

生成此图:

如您所见,即使我输入了代码,显示带有点的黑线表示的含义的图例也没有添加到我的图表中。没有出现错误,因此为什么我会迷失在哪里出错了。关于我没有包含的任何想法?

谢谢

【问题讨论】:

如果你想要图例,东西需要在aes里面 您能否详细说明您的回复?因为我有点失落 tibble(month = month.name, value = rnorm(12)) %>% ggplot(aes(x = month, y = value, fill = "My name")) + geom_col() 【参考方案1】:

为了让ggplot 知道绘制图例,您需要在aes() 中包含几何图形的一种美学。在这种情况下,如果您想为您的线条绘制图例,您需要在 geom_line() 调用中的 aes() 中包含您为线条确定的美学之一:linetypecolor作品。我们将在这里使用颜色。

哦...在没有 OP 共享他们的数据集的情况下,这是一个虚构的示例:

set.seed(1234)
dfMonth <- data.frame(
  Month=month.name,
  NumberMO=sample(50:380, 12),
  NumberME=sample(50:380, 12)
)

现在是制作绘图并确保创建图例的代码。

p <- ggplot(dfMonth, aes(x=Month)) +
  geom_col(aes(y=NumberMO), size=0.7, color="black", fill="white") +
  geom_line(aes(y=NumberME, color='black'), size=1, group=1)
p

我们有一个传奇,但有一些问题。您将获得图例的默认标题(即美学名称)和默认标签(即您在aes(color=... 中输入的任何文本。由于我们将"black" 作为值,它被应用为标签,而不是实际颜色。线条的实际颜色默认为ggplot2 使用的标准颜色集的第一级,在本例中为浅红色。

要设置颜色、图例名称和标签名称,我们应该指定值。图例中只有一项,因此无需指定,但如果您要发送一个命名向量来明确指示我们单行的名称,您最终会得到看起来有些奇怪的c('black'='black')。我还在标签名称中添加了一个换行符,以使外观更好一些。另外,月份是相互的,所以我也改变了x轴标签的角度。

最后,您可能会注意到月份不正常。这是因为默认的ggplot2 行为是考虑一列离散值,它使用字母顺序来排列级别。要解决此问题,请在使用正确的水平进行绘图之前将列指定为因子。

dfMonth$Month <- factor(dfMonth$Month, levels=month.name)

p + scale_color_manual(
        name=NULL, values=c('black'='black'),
        labels='Expected No.\nof birds') +
      theme(axis.text.x=element_text(angle=30, hjust=1))

【讨论】:

以上是关于将图例添加到组合的线和条形图 ggplot的主要内容,如果未能解决你的问题,请参考以下文章

将水平线添加到 R 中 ggplot2 中的堆叠条形图,并在图例中显示

在ggplot中向条形图添加图例

将图例添加到多元线性回归图的单个图

带有ggplot2的发散堆积条形图:图例中的因子排序问题

设置组合线和条形图最大宽度的Highcharts失败

将百分比标签添加到堆积条形图ggplot2