为了账号安全,请及时绑定邮箱和手机立即绑定

R中的智能点标签放置

R中的智能点标签放置

胡子哥哥 2019-08-30 16:19:38
1)是否有任何R库/函数可以在R图中实现INTELLIGENT标签放置?我尝试了一些,但它们都有问题 - 许多标签彼此重叠或其他点(或图中的其他对象,但我发现这更难处理)。2)如果没有,有什么方法可以如何舒适地帮助算法与特定问题点的标签放置?最舒适,最有效的解决方案。您可以使用我可重复的示例来玩和测试其他可能性,看看您是否能够取得比我更好的结果:# datax = 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 plotplot(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)先感谢您!
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

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

我在几分钟内手动预览(OS X上非常基本的PDF /图像查看器)。(编辑:工作流程正是您所期望的:我将图表保存为R中的PDF,在预览中打开它并创建带有所需标签的文本框(9pt Helvetica),然后用鼠标拖动它们直到它们看起来好的。然后我导出到PNG上传到SO。)


现在,在你屈服于迫切要求将其投入遗忘的强烈冲动之前,请留下关于如何自动完成这一过程的讽刺评论,请听我说!


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


你有少量的积分,没有一点非常接近。在这种情况下,您在问题中列出的解决方案之一可能只需要很少的调整。

您有少量的点,其中一些点太紧密,无法为典型的算法解决方案提供良好的结果。在这种情况下,因为你只有少量的点,由专人标记他们(或者与图像编辑器或微调您的来电text)不是那个很大的努力。

你有相当多的积分。在这种情况下,你真的不应该标记它们,因为很难在视觉上处理大量的标签。

:爬上肥皂盒:


由于像我们这样的人喜欢自动化,我认为我们经常陷入这样一个陷阱,即认为生成一个好的统计图形几乎每个方面都应该是自动化的。我恭敬地(谦卑地!)不同意。


没有完美的通用统计绘图环境可以自动创建您脑海中的图片。像R,ggplot2,格子等的东西做了大部分的工作; 但是额外的一点点调整,在这里添加一条线,调整边距,可能更适合不同的工具。


:从肥皂箱爬下来:


我还要注意,我认为我们都可以得到<10-15分的散点图,即使用手也几乎不可能清晰地标记,这些可能会破坏任何人提出的自动解决方案。


最后,我想重申一下,我知道这不是你正在寻找的答案。而且我并不是说算法尝试是无用的或愚蠢的。我对这个问题进行了投票,并乐意提出有趣的算法解决方案!


我发布这个答案的原因是我认为这个问题应该是规范的“R中的点标记”问题,以备将来重复使用,我认为涉及手工标签的解决方案应该在桌面上占有一席之地,就是这样。


查看完整回答
反对 回复 2019-08-30
?
互换的青春

TA贡献1797条经验 获得超6个赞

我找到了一些解决方案 它不是终极和理想的不幸,但它是现在最适合我的那个。它是半算法,半手动,因此与joran描绘的纯手动解决方案相比,它节省了时间。


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


如果在那里指定pos,则用于放置标签的算法与文本使用的算法相同,不同之处在于指针相对于所识别的点的位置确定了标识中的pos。


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


缺点是只有4个位置(顶部,左侧,底部,右侧),但我更欣赏其他4个位置(左上角,右上角,左下角,右下角)......所以我使用它来标记它不会打扰我的点以及我在我的Powerpoint演示中直接标记的其余点,正如joran提出的那样:-)


PS:我还没有尝试过directlabels lattice / ggplot解决方案,我还是喜欢使用基本的绘图库。


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 683 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信