R包wordcloud有一个非常有用的功能,称为wordlayout。它采用单词的初始位置及其各自的大小,以不重叠的方式重新排列它们。我想使用此函数的结果在ggplot中进行geom_text绘图。
我想出了以下示例,但很快意识到,由于图形包中的单词看起来更大,因此在cex(wordlayout)和大小(geom_plot)之间似乎有很大的不同。
这是我的示例代码。情节1是原始wordcloud情节,没有重叠:
library(wordcloud)
library(tm)
library(ggplot2)
samplesize=100
textdf <- data.frame(label=sample(stopwords("en"),samplesize,replace=TRUE),x=sample(c(1:1000),samplesize,replace=TRUE),y=sample(c(1:1000),samplesize,replace=TRUE),size=sample(c(1:5),samplesize,replace=TRUE))
#plot1
plot.new()
pdf(file="plot1.pdf")
textplot(textdf$x,textdf$y,textdf$label,textdf$size)
dev.off()
#plot2
ggplot(textdf,aes(x,y))+geom_text(aes(label = label, size = size))
ggsave("plot2.pdf")
#plot3
new_pos <- wordlayout(x=textdf$x,y=textdf$y,words=textdf$label,cex=textdf$size)
textdf$x <- new_pos[,1]
textdf$y <- new_pos[,2]
ggplot(textdf,aes(x,y))+geom_text(aes(label = label, size = size))
ggsave("plot3.pdf")
#plot4
textdf$x <- new_pos[,1]+0.5*new_pos[,3]#this is the way the wordcloud package rearranges the positions. I took this out of the textplot function
textdf$y <- new_pos[,2]+0.5*new_pos[,4]
ggplot(textdf,aes(x,y))+geom_text(aes(label = label, size = size))
ggsave("plot4.pdf")
有没有办法克服这种性别/大小的差异,并为ggplots重用wordlayout?
最佳答案
cex
代表字符扩展,是相对于默认值(由cin
指定)相对于默认文本进行放大的因素-在我的安装中将其设置为0.15英寸乘0.2英寸:有关更多详细信息,请参见?par
。
ggplot2 size
的@hadley explains以毫米为单位。因此,cex=1
将对应于size=3.81
或size=5.08
,具体取决于它是按宽度还是高度进行缩放。当然,字体选择可能会导致差异。
此外,要使用绝对尺寸,您需要在aes
之外具有尺寸规范,否则它将视为要映射并选择比例尺本身的变量,例如:
ggplot(textdf,aes(x,y))+geom_text(aes(label = label),size = textdf$size*3.81)
关于r - 对ggplot geom_text使用wordlayout结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21135882/