【问题标题】:Adding a legend to ggplot with facet_grid使用 facet_grid 向 ggplot 添加图例
【发布时间】:2013-05-15 00:44:54
【问题描述】:

我正在使用下面显示的代码创建一个 3x3 多面图。问题是我没有传说。

# Create column vectors
XID <- rep(c(1,5,10), each=57)
TAD.unit <- c(0, 0.25, 0.5, 0.75, 1, 1.5, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24, 36, 48, 72)
TAD <- rep(TAD.unit, length=length(XID))
FID <-rep(c(1,2,3),each=length(TAD.unit),length=length(XID))
time <- TAD + (FID-1)*14*24
dist1 <- pweibull(TAD,2,2)
dist2 <- pweibull(TAD,2,4)

# Create data frame
data.df <- as.data.frame(cbind(XID,time, FID, dist1, dist2, TAD))

library(ggplot2)
label_both = function(column,value){paste(column,"=",value)}

# Create plot
my.plot1 <- ggplot(data.df, aes(x=TAD, y=dist1)) + geom_point() + 
  geom_line(aes(x=TAD, y=dist2)) +
  facet_grid(XID ~ FID, labeller=label_both) +
  labs(x = "TAD", y = "Response")

# alternative data structure per recommendation in
# http://stackoverflow.com/questions/15418302/ggplot2-how-to-show-the-legend?rq=1
library(reshape)
df.2 <- melt(data.df, id=c("XID","FID","TAD","time"))

我尝试使用数据框 df.2 来查看这是否有助于我提供链接的堆栈溢出线程中的建议。我尝试了各种 ggplot 命令,但仍然无法正常工作。 有人可以帮帮我吗?

另外,我怎样才能将图例定位在 3x3 内有空白区域的某个位置?

非常感谢!

【问题讨论】:

    标签: r ggplot2 legend


    【解决方案1】:

    至于图例,请使用融化的数据框,例如使用颜色来区分您的两个距离数据集。例如。像这样:

    ggplot(df.2, aes(x=TAD, y=value, colour = variable)) + geom_line() + facet_grid(XID ~ FID, labeller=label_both) + labs(x = "TAD", y = "Response")
    

    至于图例定位,我会推荐你​​这个问题并给出一个很好的答案:

    Position legend in first plot of facet

    【讨论】:

    • 感谢您的提示!我想为一篇手稿准备情节,所以我更喜欢保持黑白两色,一个反应只有一个符号,另一个反应只有一条线,以便在视觉上更好地区分两种反应。在这方面有什么建议吗?
    • 使用shape = variable 代替colour = variable。更多关于如何区分不同数据集的信息可以在这里找到:docs.ggplot2.org/current/aes_linetype_size_shape.html
    • 再次感谢'thunk'。 Shape = Variable 保持黑白,但创建两条线,尽管没有图例。我当然可以改变线型来区分。问题是,我为 SO 提供了示例数据。真实数据是这样的,两条线实际上会重叠。所以这就是为什么我希望 geom_point() 用于一个变量,而 geom_line() 用于另一个。在这种情况下,我希望创造一个传奇。
    • 现在,这又是一个不同的设置。在这种情况下,我会回到您的原始数据框 (data.df) 并为不同的距离创建一个不同的几何图形,如下所示ggplot(data.df, aes(x=TAD)) + geom_line(aes(y=dist1)) + geom_point(aes(y=dist2)) + facet_grid(XID ~ FID, labeller=label_both) + labs(x = "TAD", y = "Response") - 希望能满足您的需求!
    • 今天就发表您的评论吧。我会试一试。感谢您的跟进。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2013-06-13
    • 1970-01-01
    • 2019-06-21
    • 2018-11-03
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多