【问题标题】:adding a key for geom_line to legend from geom_area将 geom_line 的键添加到 geom_area 的图例
【发布时间】:2012-08-15 22:24:48
【问题描述】:

我有一个数据框,我在其中讨论大坝的不同水流(水单位为 kcfs——每秒 1000 立方英尺——如果有人感兴趣的话)

称之为 df4plot

    date         kcfs    Flowtype
    10/1/2010        50     Power
    10/1/2010        10     Spill_Overgen
    10/1/2010         8         Spill_Force
    10/2/2010        52     Power
    10/2/2010         7     Spill_Overgen
    10/2/2010        10     Spill_Force     

(数据框中有3x365行)

所以我想做的是制作一个聚合面积图来显示这些流中的每一个

p <- ggplot(data = df4plot, aes(date,kcfs)) +
geom_area(aes(colour = Flowtype, fill=Flowtype), position = “stack”) 

我想控制使用的颜色,所以我添加了

plot_colors_aggregate <- c("forestgreen","lightsalmon","dodgerblue")
p <- p +
scale_color_manual(values = plot_colors_aggregate) +
scale_fill_manual(values = plot_colors_aggregate)

现在我想添加一条虚线,显示最大涡轮机容量——发电的流量限制——随月变化。我有一个单独的数据框(365 行长),df4FGline

    Date    FGlimit
    10/1/2010   52
    10/2/2010   52
     …
    11/1/2010   60
    11/2/2010   60
    ...
    Etc

所以现在我有

p <- p + 
geom_line(data = df4FGline, aes(x=date,y=FGlimit), colour = “darkblue”, linetype = “dashed”)

p

图例目前只是三种Flowtype的三个块。我想将流门限制的虚线添加到底部,但我无法让它显示在那里。

这可能与我对 aes 的不完全理解有关(help(aes) 非常无用)。

我尝试过类似于this 和类似于this 的东西,但由于我只是想在预先存在的图例中添加 1 行,可能吗?这对我不起作用。

我尝试在 geom_line 的括号内添加“legend = TRUE”,但它在图例的每个颜色框内放置了一条虚线,并为图例创建了第 4 个条目,但与图例的其余部分偏移(下方和右侧)... ARG!

我发誓我已经订购了这本书...您可以分享任何帮助,以便我更好地理解这个美学以及它与传奇的关系,我将非常感激。

编辑错别字

【问题讨论】:

  • 这里有一个提示:如果你 map 一个美学(在aes() 内部),ggplot 会自动创建一个图例,但如果你 set 则不会审美。
  • 但是我的两个geom不是都在做这个映射的事情,使用aes()吗?你能指出我能读到 mappingsetting 之间差异的任何地方吗?我将不胜感激。
  • Linetype 设置在 geom_line 中的 aes() 之外。
  • 非常感谢您在这方面的帮助,非常感谢。所以 set 在 aes() 之外但在 geom_line(); map 在 aes() 内部。当我将“linetype = 'dashed'”移动到 aes() 中时——当我 map 它时——我的线不再是虚线,但现在我有了一个图例条目。如果我在两个位置都有 linetype = "dashed",它会回到我的第一个版本,没有图例条目。有没有办法让 both 图例条目 虚线?

标签: r ggplot2


【解决方案1】:

这应该会有所帮助:

df <- data.frame(x = 1:10,y = 1:10)
ggplot(df,aes(x = x,y = y)) + 
   geom_line(aes(linetype = "dashed")) + 
   scale_linetype_manual(name = "Linetype",values = "dashed")

【讨论】:

  • @user156870 正如你所知,我没有花更多时间回答你的问题的原因是你的示例代码的重现性不是很好。请注意,我上面的示例代码可以简单地复制+粘贴并在 R 会话中运行。您的代码并非如此,这通常会使提供帮助变得更加困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多