如何避免R图中的标签重叠?[关闭]


44

我正在尝试在R中标记一个非常简单的散点图。这是我使用的方法:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

如您所见,结果是中等的(单击放大):

在此处输入图片说明

我尝试使用textxy函数来弥补这一点,但这并不是更好。对于密集的群集,使图像本身变大不起作用。

有什么功能或简便的方法可以弥补这一点,让R绘制不重叠的标签吗?


这是我拥有的一小部分数据:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205

1
我在这里发布了类似的问题,在那儿看看答案
好奇的

3
我找到了解决方案!该identify()让你手动决定在何处放置标签!这并不理想,但是从建议的解决方案中,这对我来说效果最好。
好奇

Answers:



19

directlabels包做到了。从其网页

该程序包试图通过提供大量有用的函数来使日常统计实践中的直接标记成为现实,这些有用的函数使使用诸如点阵图和ggplot2之类的高级绘图系统易于对普通图进行直接标记。

但是,对于稠密的地块来说,并非总是可能的。

这是一个简短的示例:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

我确实设法用摆脱了点着色col="black",但没有消除标签。


1
我无法使其正常工作。您能否提供一个简单的工作示例?
slhck 2011年

1
在您的情况下,direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))类似的结果应该会得到类似的结果。
洛朗

完善。这就是我使用您的最后一个简单示例得出的结论。颜色标签和颜色点实际上非常好,因为您知道标签所属的位置。
slhck 2011年

1
我不得不用library(lattice)得到xyplot工作。
David J. Harris

14

我建议您看一看wordcloud包装。我知道这个包不仅仅着眼于重点,还着眼于标签本身,而且样式似乎很固定。但是,我从使用它获得的结果还是非常惊人的。另请注意,所涉及的软件包版本是在您提出问题时发布的,因此它仍然是非常新的。

http://blog.fellstat.com/?cat=11

textplot()输出


9

我在使用的多个绘图中遇到了类似的问题,并编写了一个使用力场模拟来调整对象位置的基本程序包。相对于上面提到的某些解决方案,其优势在于可动态调整2D中的相对对象接近度。尽管可以进行很多改进,包括启发式方法以及与ggplot的集成等,但似乎可以完成任务。下面说明了该功能:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

目前,由于解决方案满足了我的需求,因此没有针对各种区域和点分布的启发式方法,我想尽快为人们提供有用的信息,但我将在中期添加这些信息。目前,我建议将图表缩放到100x100,然后向后缩放,并根据需要稍微调整默认的吸引力和排斥力参数。


8

如果您根本无法使标签如R那样正常工作,请记住,您始终可以将图形保存为矢量格式(例如.pdf),并将其拉入InkScape或Adobe Illustrator等编辑程序中。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.