R ggplot2中每个图例标签的多行文字

R ggplot2中每个图例标签的多行文字,r,ggplot2,legend,R,Ggplot2,Legend,我正在尝试处理条形图中图例的很长标签(请参见所包含的图片和我用来生成它的代码。我需要将它们分解为多行(2行或3行),从另一个角度来看,整个情况会变得非常广泛。一些帮助将非常有用。实际上,我也怀疑我的代码没有它应该的那么简洁,但至少它可以工作(但请随意更改) 一瞥(df) 意见:301 变量:3 $V12n 1,4,4,1,3,1,1,1,1,1,1,1,3,1,1,1。。。 $V12 De verwijzer neemt联系人op om na te gaa。。。 $METING.f METIN

我正在尝试处理条形图中图例的很长标签(请参见所包含的图片和我用来生成它的代码。我需要将它们分解为多行(2行或3行),从另一个角度来看,整个情况会变得非常广泛。一些帮助将非常有用。实际上,我也怀疑我的代码没有它应该的那么简洁,但至少它可以工作(但请随意更改)

一瞥(df)
意见:301
变量:3
$V12n 1,4,4,1,3,1,1,1,1,1,1,1,3,1,1,1。。。
$V12 De verwijzer neemt联系人op om na te gaa。。。
$METING.f METING 0,METING 0,METING 0,METING 0,Me。。。
p=ggplot(df,aes(x=V12n,fill=V12))+
geom_bar(aes(y=(…计数…))/tapply(…计数…,面板…,总和)
[…面板])+
比例y连续(标签=比例::百分比)+
geom_文本(aes(y=(…计数)/和(…计数)),
标签=刻度::百分比(…计数..)/Taply(…计数..,…面板..,总和)[面板..]),
stat=“count”,vjust=-0.25)+
平面网格(.~METING.f)+
实验室(标题=”,
x=“Vraag 12”,
y=“百分比”)+
主题(axis.text.x=element_blank(),
axis.ticks.x=元素_blank()+
刻度填充手册(数值=c(“绿黄色”、“绿色4”、“暗红色1”、“红色”),
name=“Zijn er afspraken gemaakt超过了Verantwoordelikheid naar de volgende zorgverlener的透支?\n”)
P

您可以使用
stru wrap
自动包装长字符串,也可以通过向字符串中添加
\n
(换行字符)来硬编码中断。要在图例键之间添加空格,可以使用
图例.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"))

首先,用
库(stringr)
加载stinrgr包。然后,在ggplot coce中,执行
fill=str\u wrap(V12,宽度=20)
(根据需要调整宽度)。在
scale\u fill\u manual
中,您也可以在
名称上使用
str\u wrap
,或者您可以将
\n
放在字符串中需要换行的任何位置。哇,这很有效,您的第一个
fill=…
但是现在我只需要在图例标签之间增加一些垂直空间(文本从一个标签滑动到下一个标签。我添加了一个答案来解决您问题中的每一个问题。由于您的回答,我的条形图看起来几乎完美,我只想更改图例键的顺序,以便它显示相同的条形图顺序,对最后一点有什么想法吗?太好了。正是我提出的解决方案寻求
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"))