R中的智能点标签放置

1)是否有R库/函数在R图中实现INTELLIGENT标签的放置? 我尝试了一些,但是它们都是有问题的 – 许多标签是彼此重叠或其他点(或者情节中的其他物体,但是我看到这很难处理)。

2)如果没有,有没有办法如何COMFORTABLY帮助algorithm与特定问题点的标签位置? 最需要舒适和高效的解决scheme。

你可以用我可重复的例子来玩和testing其他的可能性,看看你是否能够获得比我更好的结果:

# data x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 0.9055, 1.3307) y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 0.9717, 0.9357) ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", "SaxRub", "TurMer", "TurPil", "TurPhi") # basic plot plot(x, y, asp=1) abline(h = 1, col = "green") abline(v = 1, col = "green") 

对于标签,我尝试了这些可能性,没有人真的很好:

1)这个是可怕的:

 text(x, y, labels = ShortSci, cex= 0.7, offset = 10) 

2)如果你不想为所有的点放置标签,但只是为了离群值,但是这些标签通常是错误的:

 identify(x, y, labels = ShortSci, cex = 0.7) 

3)这个看起来很有节奏,但是标签太靠近了; 我不得不用空格填充它们,但这并没有多大帮助:

 require(maptools) pointLabel(x, y, labels = paste(" ", ShortSci, " ", sep=""), cex=0.7) 

4)

 require(plotrix) thigmophobe.labels(x, y, labels = ShortSci, cex=0.7, offset=0.5) 

5)

 require(calibrate) textxy(x, y, labs=ShortSci, cx=0.7) 

先谢谢你!

编辑:待办事项:尝试labcurve {Hmisc} 。

首先,这是我解决这个问题的结果:

在这里输入图像描述

我在几分钟内手动预览(在OS X上非常基本的PDF /图像查看器)。 ( 编辑:工作stream程正如你所期望的那样:我把剧情保存为R的PDF格式,在Preview中打开并创build带有所需标签的文本框(9pt Helvetica),然后用鼠标拖动它们直到看到然后我出口到一个PNG上传到SO。)

现在,在你屈服于强烈的冲动投票这个被遗忘,离开关于如何自动化这个过程的尖刻评论,听我说!

寻找algorithm的解决scheme是完全正确的,(恕我直言)真的很有趣。 但是,对我来说,点标签的情况大致分为三类:

  1. 你有less量的点,没有一个非常接近 。 在这种情况下,您在问题中列出的解决scheme之一很可能只是相当小的调整。
  2. 你有less量的点,其中一些是密集的典型的algorithm解决scheme,以取得良好的效果 。 在这种情况下,由于你只有less量的点,手动标记(无论是与图像编辑器或微调您的电话text )是没有多less努力。
  3. 你有相当多的点数 。 在这种情况下,你真的不应该贴上标签,因为很难在视觉上处理大量的标签。

:爬上肥皂箱:

既然像我们这样的人喜欢自动化,我想我们经常陷入这样一个陷阱,认为生成一个好的统计graphics的几乎所有方面都应该是自动化的。 我恭敬(谦卑地)不同意。

没有完美的统计绘图环境,可以自动创build您头脑中的图片。 像R,ggplot2,格子等等, 大部分的工作, 但是额外的一点调整,在这里增加一行,在那里调整一个边距,可能更适合不同的工具。

:从肥皂箱里爬下来:

我还想指出,我想我们都可以拿出10-15分的散点图,即使是手工打印,也几乎不可能干净地标记出来,而这可能会破坏某人自动解决的问题。

最后,我想重申,我知道这不是你正在寻找的答案。 我并不是说algorithm尝试是无用或愚蠢的。 我投了这个问题,并会高兴地upvote有趣的algorithm解决scheme!

我发表这个答案的原因是,我认为这个问题应该是未来重复的标准“R点标记”问题,我认为涉及手写标签的解决scheme应该在桌面上占据一席之地,就是这样。

应用于ggplot2散点图时, ggrepel看起来很有前景。

 # data x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 0.9055, 1.3307) y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 0.9717, 0.9357) ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", "SaxRub", "TurMer", "TurPil", "TurPhi") df <- data.frame(x = x, y = y, z = ShortSci) library(ggplot2) library(ggrepel) ggplot(data = df, aes(x = x, y = y)) + theme_bw() + geom_text_repel(aes(label = z), box.padding = unit(0.45, "lines")) + geom_point(colour = "green", size = 3) 

在这里输入图像描述

你尝试过直接标签包吗?

而且,顺便说一下,位置和偏移量的参数可以使用vector来让你在只有less量运行的情节中有合理数量的点时能够使它们位于正确的位置。

我find一些解决scheme! 不幸的是,这并不是最终的,理想的,但现在对我来说是最好的。 这是一半algorithm,一半手动,所以比起纯手工绘制的纯手工解决scheme节省了时间。

我忽视了非常重要的部分?identify帮助!

用于放置标签的algorithm与在文本中指定pos相同,不同之处在于指针相对于标识点的位置决定了标识中的pos。

因此,如果您在我的问题中使用了identify()解决scheme,那么您可以通过不直接点击该点来影响标签的位置,而是通过点击相对于所需方向的相邻点! 工作很棒!

缺点是,只有4个职位(顶部,左侧,底部,右侧),但我更欣赏其他4(左上angular,右上angular,左下angular,右下angular)…所以我使用这个来标记点,它不会打扰我和其余的点,我直接在我的Powerpoint演示文稿标签,作为乔兰提出:-)

PS:我还没有尝试直接标签点阵/ ggplot解决scheme,但我仍然喜欢使用基本的图库。

我build议你看看wordcloud软件包。 我知道这个包装的重点不仅在于标签本身,而且风格似乎是相当固定的。 但是,我使用它的结果还是非常棒的。 另外请注意,有问题的软件包版本是在你问这个问题的时候发布的,所以它还是很新的。

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

不是一个答案,但太长的评论。 可以在简单情况下工作的一个非常简单的方法,在Joran的后处理和已经提出的更复杂的algorithm之间的某处,就是对dataframein-place简单的转换。

我用ggplot2说明这一点,因为我比基本R图更熟悉该语法。

 df <- data.frame(x = x, y = y, z = ShortSci) library("ggplot2") ggplot(data = df, aes(x = x, y = y, label = z)) + theme_bw() + geom_point(shape = 1, colour = "green", size = 5) + geom_text(data = within(df, c(y <- y+.01, x <- x-.01)), hjust = 0, vjust = 0) 

正如你所看到的,在这种情况下,结果并不理想,但是对于某些目的来说可能是足够好的。 这是很容易的,通常这样的内容是足够within(df, y <- y+.01)

在这里输入图像描述

Interesting Posts