R 使用ggplot2在打印区域内使用预定义的文本宽度填充文本的好方法是什么?

R 使用ggplot2在打印区域内使用预定义的文本宽度填充文本的好方法是什么?,r,text,ggplot2,R,Text,Ggplot2,下面是一个问题示例: example=data.frame(x1=c(1,4.1,7),x2=c(4,7.1,10), y1=c(1,1,5),y2=c(2,2,6),text=c('Example','A Bigger Example','little.lite')) example$xmid = (example$x1+example$x2)/2 example$ymid = (example$y1+example$y2)/2 ggplot()+geom_rect(data=exampl

下面是一个问题示例:

example=data.frame(x1=c(1,4.1,7),x2=c(4,7.1,10),
 y1=c(1,1,5),y2=c(2,2,6),text=c('Example','A Bigger Example','little.lite'))
example$xmid = (example$x1+example$x2)/2
example$ymid = (example$y1+example$y2)/2

ggplot()+geom_rect(data=example,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2,fill=text))+
geom_text(data=example,aes(x=xmid,y=ymid,label=text))
输出如下所示:

我曾尝试通过使用字符串中的字符数来调整标签的大小,但它没有考虑非单空格字体中不同字符的间距和字距。比如说,

example$text_size=24/nchar(as.character(example$text))
ggplot()+geom_rect(data=example,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2,fill=text))+
geom_text(data=example,aes(x=xmid,y=ymid,label=text,size=text_size))+
 scale_size_continuous(range=c(4,8))
然后,输出如下所示:


虽然下框中的文本宽度相同,但包含许多l和t的字符串的文本宽度较小。有没有办法提前计算间距,以便考虑所有不同字符的宽度?

根据@Tyler Rinker的建议,我使用了
strwidth
函数而不是
nchar

example$text_size2=24/strwidth(as.character(example$text))
ggplot()+geom_rect(data=example,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2,fill=text))+
geom_text(data=example,aes(x=xmid,y=ymid,label=text,size=text_size2))+
scale_size_continuous(range=c(4,8))
最终结果如下所示:


strwidth
在这里可能对您有用。当我尝试运行您的示例时,我在strwidth(as.character(example$text)):plot.new中得到了
错误:尚未调用
。从文档中可以看出,如果
units=“user”
(目前的默认设置),该函数将从图形设备中提取宽度,并且似乎不适用于ggplot2。使用
units=“figure”
在2018年版本的R和ggplot2中进行例行工作。