Ggplot2 - 我无法插入图表图例[重复]
Posted
技术标签:
【中文标题】Ggplot2 - 我无法插入图表图例[重复]【英文标题】:Ggplot2 - I can't insert the chart legend [duplicate] 【发布时间】:2019-08-11 10:20:00 【问题描述】:大家晚上好, 数据是:
Data X Y
01/01/16 17073 229
01/02/16 16094 375
01/03/16 17380 880
01/04/16 19993 9978
01/05/16 26290 24782
01/06/16 32982 36437
01/07/16 38490 42547
01/08/16 36688 43928
01/09/16 22799 36734
01/10/16 15000 11816
01/11/16 10494 680
01/12/16 10944 434
01/01/17 17217 235
01/02/17 15501 466
01/03/17 19236 1608
01/04/17 22239 8490
01/05/17 30390 23374
01/06/17 35579 34568
01/07/17 39613 43283
01/08/17 44089 44741
01/09/17 25542 35611
01/10/17 16357 10131
01/11/17 11754 541
02/12/17 11583 362
我的图表有点问题。
我写了这段代码:
ggplot()
+ geom_line(data=DB_Reg, aes(x=DB_Reg$Data,
y=DB_Reg$X), color='435',size=0.5, show.legend = TRUE)+
geom_line(data=DB_Reg, aes(x=DB_Reg$Data, y=DB_Reg$Y),color='534',size=0.5, show.legend = TRUE)+
ggtitle("XY")+
xlab("Dates")+
ylab("Quantity")+
geom_point()
我想把这两条线的图例放在一起。我为这两行写了 show.legend=TRUE,但是没有用。
【问题讨论】:
您不需要DB_reg$
调用中的 aes
位,请尝试删除它们。另外,如果您可以添加一些minimal data and example of your code,这将有助于我们解决问题
我要改变了。谢谢。
【参考方案1】:
添加一些数据来重现您的代码是一个很好的规则。 让我们假设数据看起来像
library(dplyr)
library(ggplot2)
library(tidyr)
library(lubridate)
DB_Reg <- tibble(Data=seq(ymd('2016-01-01'),ymd('2016-12-31'), by = 1)) %>%
mutate(X=2+sin(yday(Data)/360*2*pi),
Y=2+cos(yday(Data)/360*2*pi))
为了在图例中显示,您的参数应映射到aes()
。
为此,需要进行一些数据准备。
下面的代码应该给出你想要的结果:
DB_Reg %>%
gather(key = 'line', value = 'value', -Data) %>%
ggplot() +
geom_line(aes(x=Data, y=value, group=line, color=line))+
scale_color_manual(values=c('435', '534'))+
ggtitle("XY")+
xlab("Dates")+
ylab("Quantity")
【讨论】:
谢谢你的回答,如果我忘记放数据了,很抱歉。 @bdemarest 感谢您的编辑!现在更清楚了。【参考方案2】:使用ggplot
时,确保代码以正确的顺序编写非常重要。例如,在末尾添加geom_point()
将覆盖前面的参数。尝试删除它。这是一个应该可以工作的脚本。
ggplot(data=DB_Reg)+
geom_line(mapping=aes(y=X,x= Data,color="X"),size=1 ) +
geom_line(mapping=aes(y=Y,x= Data,color="Y"),size=1) +
scale_color_manual(values = c(
'X' = 'darkblue',
'Y' = 'red')) +
labs(color = 'Y series')
【讨论】:
非常感谢。我写得不是很有序。现在它正在工作。 @Francesco 我已经更新了我的答案以包含一个脚本,该脚本应该可以满足您的需求【参考方案3】:在这里查看您的数据会很有帮助,主要问题是您分别绘制了两个数据系列,而不是在aes()
中为ggplot2
提供分组变量(即color
、shape
,或group
)。
例如,如果您要绘制qsec ~ hp
,同时按mtcars
数据集中的柱面数进行分组,您希望在ggplot()
函数中指定所有美学,如下所示:
library(ggplot2)
data(mtcars)
ggplot(mtcars,
aes(x = hp,
y = qsec,
color = as.factor(cyl)
)
) +
geom_point() +
labs(title = "Horsepower Makes Cars Faster",
x = "Quarter Mile Time (Seconds)",
y = "Horsepower",
color = "Number of Cylinders"
)
每个组使用的颜色是ggplot
默认值,但如果您想使用自定义调色板,可以使用scale_color_manual()
函数;
library(ggplot2)
data(mtcars)
ggplot(mtcars,
aes(x = hp,
y = qsec,
color = as.factor(cyl)
)
) +
geom_point() +
labs(title = "Horsepower Makes Cars Faster",
x = "Quarter Mile Time (Seconds)",
y = "Horsepower",
color = "Number of Cylinders"
) +
scale_color_manual(values = c("4" = "firebrick",
"6" = "cornflowerblue",
"8" = "chartreuse3"
)
)
有多种方法可以手动调整图例,但将分组变量添加到 DB_Reg
,并使用 color
美学指定它应该可以解决您的问题。
【讨论】:
谢谢你的回答,如果我忘记放数据了,很抱歉。以上是关于Ggplot2 - 我无法插入图表图例[重复]的主要内容,如果未能解决你的问题,请参考以下文章