【问题标题】:ggplot2 - Build a legend with data coming from differents dataframesggplot2 - 使用来自不同数据框的数据构建图例
【发布时间】:2019-02-28 13:54:05
【问题描述】:

我正在为如何在我的情节中添加图例而苦苦挣扎。我正在绘制来自 4 个不同数据帧的同一个图 4 密度图

  • 每一个都由一列组成
  • 列名与 R 对象同名 (colnames(df1)='df1')
  • 行数不同,但行名在一个 df 到另一个之间不能是唯一的

代码是:

ggplot() +
    geom_density(data=df1, aes(x=df1), color='black', fill='black', alpha = 0.2) +
    geom_density(data=df2, aes(x=df2), color='darkred', fill='darkred',alpha = 0.2) +
    geom_density(data=df3, aes(x=df3), color='darkblue', fill='darkblue',alpha = 0.2) +
    geom_density(data=df4, aes(x=df4), color='darkgreen', fill='darkgreen',alpha = 0.2) +
    xlim(0.5,1) +
    ggtitle('Density plots') +
    xlab('Indices') +
    ylab('Density')

添加图例的常用方法是合并数据框,每组绘制每个密度并按组着色;但在那种情况下,我怎样才能建立一个图例,说明哪条曲线对应于哪个数据框?

谢谢。

【问题讨论】:

  • 如果您的每个数据框只有一列,为什么不将它们全部合并?
  • 因为我在使用 R 数据类型时更加苦恼 ^^。最有效的方法是什么?
  • 您自己回答了您的问题 - 最有效的方法是“合并数据框,每组绘制每个密度并按组着色”
  • 根据您最后的评论,这似乎不是ggplot 或传说问题。
  • 请根据How to make a great R reproducible example阅读并编辑您的问题,以便其他用户可以帮助您。

标签: r ggplot2 legend


【解决方案1】:

获取图例的一种方法是在美学映射中添加颜色并填充,并为它们指定您想要在图例中显示的名称,然后使用 scale_...._manual)() 为两个刻度指定相同的名称和值,例如这个:

library(ggplot2)
# dummy data
df1 <- data_frame(df1 = runif(100))
df2 <- data_frame(df2 = runif(100))
df3 <- data_frame(df3 = runif(100))
df4 <- data_frame(df4 = runif(100))

ggplot() +
  geom_density(data=df1, aes(x=df1, color='df1', fill='df1'), alpha = 0.2) +
  geom_density(data=df2, aes(x=df2, color='df2', fill='df2'), alpha = 0.2) +
  geom_density(data=df3, aes(x=df3, color='df3', fill='df3'), alpha = 0.2) +
  geom_density(data=df4, aes(x=df4, color='df4', fill='df4'), alpha = 0.2) +
  scale_color_manual(name = 'Title', values=c('black', 'darkred', 'darkblue', 'darkgreen')) + 
  scale_fill_manual(name = 'Title', values=c('black', 'darkred', 'darkblue', 'darkgreen')) +
  xlim(0.5,1) +
  ggtitle('Density plots') +
  xlab('Indices') +
  ylab('Density')

【讨论】:

  • 这可能会回答这个问题,但如果你有 10 个 data.frame 呢?还是100?这不是ggplot 的工作方式。根据 cmets,我会等待 OP 用更完整的示例改进问题。
  • 我投票认为这是一条有用的评论,因为我同意,ggplot2 不打算以这种方式工作,但我的回答旨在展示如何使用图例和比例尺ggplot2,并且都在“asker”的知识范围内(即在提供的代码中没有改变太多),为此我不再需要信息
  • 这正是我想要做的;我很接近它,感谢您知道,非常感谢。
猜你喜欢
  • 2019-01-24
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 2015-12-14
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多