ggplot2对象的动态位置(特别是geom_text)?

Ari*_*man 16 r ggplot2

使用ArcGIS制作地图时,默认情况下,软件会自动推送点和多边形标签,以避免使用专有算法重叠.他们将此称为动态标签. ggplot2具有position_jitter优异的分数(因为动态标签可能会产生系统偏差),但对标签使用不太好geom_text.

以下是动态标记算法可能解决的抖动问题的示例:

library(ggplot2)
ggplot( mtcars,aes( x=wt, y=mpg, label=rownames(mtcars) ) ) +
  geom_point() +
  geom_text( position=position_jitter(h=1,w=1) )
Run Code Online (Sandbox Code Playgroud)

标有问题的抖动标签

ggplot2中是否已经存在这样的动态标签功能?

如果没有,那么存在哪些算法,是否可以position_dynamic在R中实现?

Suk*_*ngh 11

看看新包装ggrepel.ggrepel为ggplot2提供geoms以排斥重叠的文本标签.它适用于geom_text和geom_label.

在此输入图像描述

图来自这篇博客文章.


gre*_*egk 9

我遇到了与我一直在使用的几个图的类似问题,并编写了一个使用力场模拟来调整对象位置的基本包.虽然可以进行很多改进,包括与ggplot的集成等,但它似乎完成了任务.以下说明了该功能:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()
Run Code Online (Sandbox Code Playgroud)

  • 确实:CRAN提交存在一些问题,我对早期的软件包可用性感到困惑.它现在以源代码形式提供(http://cran.r-project.org/web/packages/FField/index.html)标签排斥演示的顺序:`install.packages("FField",type = "source")库(FField)install.packages("ggplot2")install.packages("gridExtra")FFieldPtRepDemo()`代码非常明显:`FFieldPtRepDemo`目前还没有针对各种各样的智能启发式方法区域和点分布,因为我想快速获得对人们有用的东西. (2认同)

And*_*rie 8

AFAIK,最好的存在directlabels,可从R-forgeCRAN获得,并提供全面的示例页面.

这似乎是一个很好的起点,但在我看来有以下消极方面:

  • ggplot分离数据和表示的哲学不同,directlabels返回ggplot对象而不是geom
  • 它只适用于group美学而非个人观点

我前段时间看了一下源代码,我认为应该很容易调整代码来解决我提到的两个问题.

还有就是如何在使用这样的例子ggplot这个问题上的SO


Rei*_*son 7

这不是可以在ggplot2中直接使用的任何东西,但是ordipointlabel()vegan中的函数尝试做类似的事情.它将数据显示为点,并尝试使用适当的标签标记每个点,使用优化算法将标签定位在其点旁边但不重叠其他标签和点.

?ordipointlabel提到它是基于pointlabel()maptools包,也可以是另一个地方去寻找灵感.