【问题标题】:Wrap legend text in ggplot2在 ggplot2 中包装图例文本
【发布时间】:2012-05-07 02:59:42
【问题描述】:

在使用 ggplot2 生成图表时,我有一些很长的图例名称,我希望将它们包含在两行中。例如:

a <- (1:10)
b <- c(1,1.5,2,4,5,5.3,7,9,9.5,9.8)
places = c("Birmingham","Chester-le-street","Cambridge", "Newcastle-upon-Tyne","Peterborough","Cambridge", "Newcastle-upon-Tyne","Peterborough","Liverpool","Stratford-upon-Avon")
df1 = data.frame(a,b,places)
library(ggplot2)
i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3) + opts(legend.position="bottom")

当框设置为底部时,我将如何包装图例项 - 例如 2 或 3 行?此刻,传说中的七件物品紧挨着。我希望它们显示在两行中(比如顶行有四个城镇,第二行有三个城镇)。

非常感谢。

【问题讨论】:

  • 我会将您的问题分成两个单独的问题。我的回答将回答其中一个问题(将文本包装为原始问题中显而易见的),第二个问题是如何使用 ggplot 创建多列图例。 PS:对于您的问题的回答,图例的位置应该不会有太大变化)。

标签: r ggplot2


【解决方案1】:

我发现非常方便的另一种包装图例标签的方法如下(全部归功于https://sites.google.com/site/simonthelwall/home/r/ggplot2#TOC-Wrapping-legend-labels):

a <- (1:10)
b <- c(1,1.5,2,4,5,5.3,7,9,9.5,9.8)
places = c("Birmingham","Chester-le-street","Cambridge", "Newcastle-upon-Tyne","Peterborough","Cambridge", "Newcastle-upon-Tyne","Peterborough","Liverpool","Stratford-upon-Avon")
df1 = data.frame(a,b,places)
library(ggplot2)
i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3) 

i + scale_colour_discrete(labels = function(x) str_wrap(x, width = 5))

【讨论】:

    【解决方案2】:

    好的,鉴于您的编辑,您可能想要这个:

    library(scales)
    i + guides(colour = guide_legend(nrow = 2))
    

    但您可能会发现您仍然希望使用文本环绕技术,以使其适合。

    【讨论】:

    • 除了colour,这也适用于其他美学,例如guides(linetype=guide_legend(nrow=2))
    【解决方案3】:

    从你的例子:

    df1$places<-sub("-", "- \n ", df1$places)  
    
    i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3)
    

    注意事项: - 您可以使用 gsub 将所有“-”替换为“-\n”

    【讨论】:

    • 感谢@Etienne Low-Décarie,但这并不是我想要的。我仍然想要底部的图例,但是图例文本很长。因此,我希望它们在两行上而不是一长行上的 7 个标签(保持图形与您的示例中的形状相似)。
    • @KatieT 您需要更清楚地确定是要将图例中的 文本标签 换成 2 行,还是 图例项 本身, 或两者。您的问题只提到了包装“传说名称”,这就是这个答案所要解决的问题。
    • 你知道如何使用图例的标题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2012-08-21
    • 2018-03-21
    • 1970-01-01
    • 2017-12-30
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多