【问题标题】:Generating a legend in ggplot2在 ggplot2 中生成图例
【发布时间】:2016-11-13 11:57:15
【问题描述】:

我试图为我的 ggplot 生成一个图例,我想用 11 个数据点在 2.5 个月的时间范围内说明 5 条不同的线。我可以生成图表,但无法将图例与线条的颜色和名称进行比较。我尝试了不同的命令,即 scale_colour_manual、scale_fill_discrete、opts、guides,......但没有任何效果。我不知道出了什么问题.. 有人能帮帮我吗?

这里是定义数据框的命令。

Spaß <- read.csv(file="Spaßfaktor.csv", header = TRUE, sep = ";", dec=",")

SVS <- ts(Spaß$Sehr.Viel.Spaß, deltat=1/52)
VS <- ts(Viel.Spaß, deltat=1/52)
N <- ts(Normal, deltat=1/52)
WS <- ts(wenig.Spaß, deltat=1/52)
SWS <- ts(Sehr.wenig.Spaß, deltat=1/52)

ZP <- strptime(Spaß$Zeitpunkt, format="%d.%m.%Y")
ZP

df<-data.frame(ZP, SVS, VS, N, WS, SWS)

为了生成图表,我使用了以下命令(包括命令 scale_colour_manual)。包括此命令,R 不会创建图形。如果你从 ggplot 命令中删除它,图形会显示:

       SP<-ggplot(df, aes(Zeit) ) +
      geom_line(aes(y=SVS), colour="green", lwd=1.3) +  # first layer
      geom_line(aes(y=VS), colour="blue", lwd=1.3) +
      geom_line(aes(y=N), colour="black", lwd=1.3) +  
      geom_line(aes(y=WS), colour="orange", lwd=1.3) +
      geom_line(aes(y=SWS), colour="red", lwd=1.3) +
       scale_colour_manual("", 
                breaks = c("Sehr viel Spaß", "Viel Spaß", "Normal", "Wenig Spaß", "Sehr wenig Spaß"),
                          values = c("green", "blue", "black", "Orange", "Red"))+
      xlab("Zeit") +
      scale_y_continuous("Anzahl in Prozent", limits = c(0,65)) + 
      labs(title="Häufigkeit der Auspräungen des Faktors Spaß")

SP

我还在最后尝试了命令 scale_fill_discrete 或 guide,方法是将其添加到 SP。这意味着即:SP + guides(fill = guide_legend(reverse=TRUE))SP + scale_fill_discrete(name="Legende", labels=c("Sehr viel Spaß", "Viel Spaß", "Normal", "Wenig Spaß", "Sehr wenig Spaß"))

有人可以帮帮我吗?

我自己通过调查生成的数据。它们如下所示:

Varaible       Spaß    Beurteilung
sehr viel Spaß/Sehr gut 4   5
Viel Spaß/Gut     8     6
Normal/Neutral    10    9
wenig Spaß/schlecht    3    4
sehr wenig Spaß/Sehr schlecht      3    4

【问题讨论】:

  • 我认为你需要做一些数据重塑。一般来说,在ggplot中,如果你必须重复'geom_line'之类的命令,你就错了。

标签: r ggplot2 legend


【解决方案1】:

要扩展 Herka 的评论,您需要使用 tidyrreshape2 将数据从宽格式转换为长格式。每个包的小插曲都深入涵盖了这一点。然后,您可以在geom_line 中的aes 调用中设置颜色,并使用scale_color_manual 适当地设置中断、颜色和标签。

library(tidyr)
library(ggplot2)

# using your input dataset provided in the separate answer
df <- gather(df, variable, value, -Zeitpunkt)

ggplot(df, aes(x = ZP) ) +
  geom_line(aes(y = value, colour = variable, group = variable), lwd = 1.3) + 
  scale_colour_manual(labels = c("Sehr viel Spaß", "Viel Spaß", "Normal", "Wenig Spaß", "Sehr wenig Spaß"),
                      breaks = c("SVS","VS","N","WS","W"),
                      values = c("green", "blue", "black", "Orange", "Red")) +
  xlab("Zeit") +
  scale_y_continuous("Anzahl in Prozent", limits = c(0,65)) + 
  labs(title="Häufigkeit der Auspräungen des Faktors Spaß")

【讨论】:

  • 感谢您的帮助。但是命令不起作用。它只是给我一个 ggplot 一行。但是我想为 5 个有趣的字符设置 5 个不同的行。也许问题还在于,我发布了错误的数据。对不起!我发了另一个帖子,如果你能再次帮助我。谢谢!
  • 保持颜色 = 绿色、未设置组且缺少右括号时出现问题。我已经修复了错误,它现在应该可以工作了。
  • 就我所知,再问一个问题:是否可以在此命令中为图形(而不是图例)将特定颜色重新分配给变量/行?你知道我说“sehr viel Spaß”是绿色的,“viel Spaß”是蓝色的,“normal”是黑色的,“wenig Spaß”是橙色的,“sehr wenig Spaß”是红色的。我通过更改顺序尝试了的 data.frame 命令,还通过定义 { geom_line(aes(y = value, color = c("green", "blue", "black", "orange", "red"), group = variable), lwd = 1.3) + ...} 但它没有用..你有什么想法吗?
  • 我不这么认为(如果有人更了解,请纠正我)。您必须在比例构造中指定这些以覆盖默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2020-12-03
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多