【问题标题】:ggplot2: How to add linebreak to horizontal legendggplot2:如何向水平图例添加换行符
【发布时间】:2017-02-16 17:39:17
【问题描述】:

请考虑以下 R 脚本(取自 here 并稍作修改):

require(ggplot2)

x <- 1:10
y <- jitter(x^2)

DF <- data.frame(x, y)

p <- ggplot(DF, aes(x = x, y = y)) + geom_point() +
  stat_smooth(method = 'lm', aes(colour = 'linear')) +
  stat_smooth(method = 'lm', formula = y ~ poly(x,2), 
              aes(colour = 'polynomial')) +
  stat_smooth(method = 'nls', formula = y ~ a * log(x) +b, 
              aes(colour = 'logarithmic')) +
  stat_smooth(method = 'nls', formula = y ~ a*exp(b *x), 
              aes(colour = 'Exponential')) +
  theme(legend.position = "top") 

p <- p + guides(guide_legend(ncol=2,nrow=2,byrow=TRUE))


p

图例显示在图的顶部。我想把这个图例分成两行,每行有两个键。这可能吗?

请注意,如您所见,我已经尝试过

p+guides(guide_legend(ncol=2,nrow=2,byrow=TRUE))

按照herehere 的建议,但它对我不起作用。这个建议基本上显示了线性和多项式模型的数据和图例,完全隐藏了对数和指数模型。

【问题讨论】:

  • 您需要指定哪个图例,在本例中为 colour 图例:guides(colour=guide_legend(ncol=2,nrow=2,byrow=TRUE))。但是,当我运行您的代码时,nls 模型的 stat_smooth 失败,因此为图例的第二行创建了空间,但实际上没有为 nls 模型呈现图例框。
  • @eipi10 这确实有效;谢谢,但是如果我有奇数个键怎么办,并且我希望图例的每一行水平居中对齐。这可能吗?

标签: r ggplot2 legend


【解决方案1】:

正如eipi10所解释的,

您需要指定哪个图例,在本例中为颜色图例:guides(colour=guide_legend(ncol=2,nrow=2,byrow=TRUE)).

为了澄清,美学定义了每一行的colour。如果使用fill,则该行可能是guides(fill=guide_legend(ncol=2,nrow=2,byrow=TRUE))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多