如何抖动文本以避免ggplot2散点图中的重叠?

use*_*313 35 position r scatter-plot ggplot2

我想在ggplot2中创建一个干净版本的文本标签散点图.目标是直观地表示与约25个项目相关联的增加值.我已经在使用"position_jitter"了,但我想知道我能不能做得更好.

这是一些模拟数据:

title <- rep("A Really Rather Long Text Label", 25)
value <- runif(25, 1,10)
spacing <- seq(1:25)
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

以下是生成图表的代码:

library(ggplot2)
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) +
geom_text(aes(colour = value),
    size = 2.5, fontface = "bold",
    vjust = 0,
    position = position_jitter(width=5, height=0)) +
theme_bw() +
scale_x_continuous(limits = c(-5, 30))+
scale_colour_gradient(low = "#6BAED6", high = "#08306B") +
theme(axis.title.x = element_blank(),
      axis.ticks = element_blank(),
      axis.text.x = element_blank(),
      legend.position = "none")
myplot
Run Code Online (Sandbox Code Playgroud)

在合理大小的图形中,所有这些文本都有足够的空间 - 只要文本可以自由移动到需要水平的位置!我不想垂直抖动,因为要点是显示与每个文本标签关联的y值.

每次运行ggplot命令时,图表都会略有不同 - 有时抖动结果比其他时候更好.但我还没有找到一种方法来系统地防止标签重叠.

对于如何清理文本的水平位置而不必手动移动单个项目的任何建议,我将不胜感激.我也很高兴听到关于如何改进这种视觉表现的其他提示.

Jon*_*nas 5

看看FField包装

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

(来自这篇文章https://stats.stackexchange.com/a/62856)