ggplot2中图例标签的多行文本

33

我正在尝试处理条形图中传说中的非常长标签(请参见包含的图片和我用于生成它的代码)。我需要将它们分解为多个(2或3行)行,否则整张图片会变得太宽。需要一些帮助。实际上,我还怀疑我的代码不够简洁,但至少它可以工作(但请随意更改)

enter image description here

glimpse(df)

Observations: 301
Variables: 3
$ V12n     <int> 1, 4, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1...
$ V12      <fctr> De verwijzer neemt contact op om na te gaa...
$ METING.f <fctr> Meting 0, Meting 0, Meting 0, Meting 0, Me...

p = ggplot(df, aes(x = V12n, fill = V12)) + 
 geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)
 [..PANEL..])) + 
 scale_y_continuous(labels = scales::percent) + 
 geom_text(aes(y = ((..count..)/sum(..count..)), 
               label = scales::percent((..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..])), 
               stat = "count", vjust = -0.25) +
 facet_grid(.~ METING.f) +
 labs(title = " ",
   x = "Vraag 12",
   y = "Percentage")  +
 theme(axis.text.x = element_blank(),
       axis.ticks.x=element_blank()) +
 scale_fill_manual(values = c("greenyellow", "green4", "darkorange1", "red"), 
                name = "Zijn er afspraken gemaakt over het overdragen van de verantwoordelijkheid naar de volgende zorgverlener?\n") 

 p

8
首先,使用library(stringr)加载stringr包。然后,在ggplot代码中,输入fill=str_wrap(V12, width=20)(根据需要调整宽度)。在scale_fill_manual中,您也可以在name上使用str_wrap,或者只需在字符串中任何需要换行的位置放置\n即可。 - eipi10
哇,它运行了,你的第一个 fill = ... 但现在我只需要在图例标签之间增加一些垂直空间(文本在一个标签到下一个标签之间垂直重叠)。 - Benjamin Telkamp
2
我已经添加了一个答案来解决你问题中的每个问题。 - eipi10
1个回答

65

您可以使用str_wrap来自动换行长字符串,或者通过在字符串中添加\n(换行符)来硬编码换行。要在图例键之间添加空格,可以使用legend.key.height主题元素。以下是内置的iris数据框的示例:

library(stringr)
library(tidyverse)

# Create long labels to be wrapped
iris$Species = paste(iris$Species, 
                     "random text to make the labels much much longer than the original labels")

ggplot(iris, aes(Sepal.Length, Sepal.Width, colour=str_wrap(Species,20))) +
  geom_point() +
  labs(colour="Long title shortened\nwith wrapping") +
  theme(legend.key.height=unit(2, "cm"))

输入图像描述


2
由于你的回答,我的条形图看起来几乎完美了,我只想更改图例键的顺序,以便它显示与条形图相同的顺序,你有什么好主意吗? - Benjamin Telkamp
太棒了。这正是我正在寻找的解决方案。 - Raghavan vmvs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接