将图例添加到组合的线和条形图 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()
中包含您为线条确定的美学之一:linetype
或 color
作品。我们将在这里使用颜色。
哦...在没有 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的主要内容,如果未能解决你的问题,请参考以下文章