R ggplot缺少图例

R ggplot缺少图例,r,ggplot2,R,Ggplot2,我试图为我的数据集绘制一部分线条,但我似乎不知道如何让图例正确显示,无论是正常显示还是使用melt显示。数据集具有以下结构(实际数据集中有更多预测和日期,这只是一个示例): 我目前正在使用此代码: ggplot(df, aes(x = Date)) + geom_line(aes(y = Fcst1), color = "red", size = 1) + geom_line(aes(y = Fcst2), color = "blue",

我试图为我的数据集绘制一部分线条,但我似乎不知道如何让图例正确显示,无论是正常显示还是使用melt显示。数据集具有以下结构(实际数据集中有更多预测和日期,这只是一个示例):

我目前正在使用此代码:

ggplot(df, aes(x = Date)) +
  geom_line(aes(y = Fcst1), color = "red", size = 1) +
  geom_line(aes(y = Fcst2),
    color = "blue",
    size = 1
  ) +
  geom_line(aes(y = Fcst3),
    color = "green",
    size = 1
  ) +
  geom_line(aes(y = Fcst4),
    color = "yellow",
    size = 1
  ) +
  geom_line(aes(y = Fcst5),
    color = "purple",
    size = 1
  ) +
  geom_line(aes(y = Fcst6), color = "orange", size = 1) +
  geom_line(aes(y = Actual), color = "black", size = 1.2) +
  ggtitle(label = "Actuals vs 2015 Forecasts", subtitle = fname) +
  ylab("Balance") +
  scale_y_continuous(labels = comma)

无论发生什么,我都无法正确显示图例,即使我尝试使用熔体。有人能帮帮我吗?

ggplot2
喜欢长格式的东西,并且倾向于“惩罚”(施加压力)做你现在正在做的事情。让我们重新塑造(我将使用
tidyr::pivot\u更长的时间
,其他人也可以)

库(ggplot2)
ggplot(tidyr::pivot_更长(df,Fcst1:Fcst4),
aes(日期、值、颜色=名称))+
geom_线()

可以看出,在
aes
thetic中使用
color=
会相应地改变颜色。如果您想控制颜色,有许多主题可用(例如,
viridis
和许多具有色盲配置文件),但手动操作是通过
scale\u color\u manual
完成的,我将在下面演示。最后,我将调整名称和一些类似的内容

ggplot(tidyr::pivot_longer(df,实际:Fcst4,name_to=“Forecast”,name_prefix=“Fcst”),
aes(日期、值、颜色=预测))+
几何尺寸线(尺寸=1)+
比例颜色手动(值=c(“实际”=“黑色”、“1”=“红色”、“2”=“蓝色”),
“3”=“绿色”、“4”=“黄色”、“5”=“紫色”,
“6”=“橙色”))+
ggtitle(label=“实际值vs 2015预测值”,subtitle=“(unk文件名)”)+
ylab(“余额”)+
比例y连续(标签=比例::逗号)
手动颜色不必完全匹配,正如您在定义但未使用的
5
中所看到的那样(基于您的数据样本)。
值=
命名向量中缺少的颜色将从绘图中删除(带有警告)

最后,一个常见的问题是在图例中对组件进行排序。这可以通过
系数
s来实现:

df_long%
mutate(grp=cut(as.integer(as.character(Forecast)),c(0,5,9),labels=FALSE))
df_合计%
过滤器(预测=“实际”)%>%
选择(-grp)%>%
交叉(,唯一(选择(df_rest,grp)))%>%
绑定行(df\u rest)
ggplot(df_组合,aes(日期、值、颜色=预测))+
几何尺寸线(尺寸=1)+
平面网格(grp~)

  • 刻面,但具有一组更易于维护的刻面。我将使用一个简单的
    data.frame
    来控制
    $grp
    中包含哪些行。这使得它更容易(imo)为特定的面“挑选”特定的线

    grps%
    过滤器(grp==1)%>%
    ggplot(、aes(日期、值、颜色=预测))+
    几何尺寸线(尺寸=1)+
    平面网格(grp~)
    

  • 嗨,谢谢你的帮助!我将如何选择要特别绘制的线?我总共有40个预测,但我正在绘制其中4个加上今年的实际值。例如,对于2015年,我想绘制实际值、Fcst12、Fcst15、Fcst28和Fcst46。我对ggplot比较陌生,所以我发现传说没有像我最初那样默认显示,这有点令人沮丧。这听起来像是一个过滤问题。如果使用
    dplyr
    ,则
    df%>%tidyr::pivot_longer(…)%%>%过滤器(预测百分比以%c(“实际”、“12”、“15”))
    。如果您对
    dplyr
    感到不舒服,则可以创建中间(临时)数据集。这可能是在
    pivot\u longer
    之前完成的,如在
    df[,c(“日期”、“实际”、“Fcst14”、“Fcst83”)]
    中,然后是pivot,或者在使用%
    技巧中的
    %之后,我理解您的沮丧。请理解,
    ggplot2
    有很多效率,其中大多数都依赖于“长数据”(反之亦然)。通过多次调用
    geom_line
    来强制使用它相对来说效率较低,因为它需要您手动控制颜色、图例等。。。这增加了不一致的可能性(即,线条和图例之间)。通过使数据固有的东西,它减少或消除了这种可能性。如果您对基本图形或某些非R绘图库更熟悉,那么肯定有一条曲线,但请相信我:这是值得的。@kmai2,请参阅我的编辑,它为各种组提供了更多选项。
    ggplot(df, aes(x = Date)) +
      geom_line(aes(y = Fcst1), color = "red", size = 1) +
      geom_line(aes(y = Fcst2),
        color = "blue",
        size = 1
      ) +
      geom_line(aes(y = Fcst3),
        color = "green",
        size = 1
      ) +
      geom_line(aes(y = Fcst4),
        color = "yellow",
        size = 1
      ) +
      geom_line(aes(y = Fcst5),
        color = "purple",
        size = 1
      ) +
      geom_line(aes(y = Fcst6), color = "orange", size = 1) +
      geom_line(aes(y = Actual), color = "black", size = 1.2) +
      ggtitle(label = "Actuals vs 2015 Forecasts", subtitle = fname) +
      ylab("Balance") +
      scale_y_continuous(labels = comma)