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 提供分组变量(即colorshape ,或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 - 我无法插入图表图例[重复]的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2:从列表和常见图例中在多个页面上绘制图形

在ggplot2中的图表下方绘制图例和图例标题上方的图例

使用ggplot2为甘特图创建图例

改变ggplot2图例中中位数和均值的颜色

ggplot2 绘制两个图例

如何使用ggplot2编辑图例的位置