36

在使用 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 行?此刻,传说中的七件物品紧挨着。我希望它们显示在两行中(比如顶行有四个城镇,第二行有三个城镇)。

提前谢谢了。

4

3 回答 3

38

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

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

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

于 2012-04-26T14:13:41.923 回答
22

从你的例子:

df1$places<-sub("-", "- \n ", df1$places)  

i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3)

在此处输入图像描述

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

于 2012-04-26T11:42:13.383 回答
5

我发现非常方便的另一种包装图例标签的方法如下(所有归功于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))

在此处输入图像描述

于 2020-06-30T12:28:24.093 回答