r - ggrepel : Repelling text in only one direction, 并返回排斥文本的值

标签 r text ggplot2 label

我有一个数据集,其中每个数据点都有一个受约束的 x 值(代表一个定量变量的实际实例)、任意的 y 值(存在只是为了提供展开文本的维度)和一个标签.我的数据集可能非常大,并且经常存在文本重叠,即使我尝试将数据尽可能多地分布在 y 轴上也是如此。

因此,我正在尝试使用新的ggrepel。但是,我试图将文本标签限制在它们的 x 值位置,同时只允许它们在 y 方向上相互排斥。

例如,下面的代码为 32 个数据点生成一个图,其中 x 值显示汽车中的气缸数,而 y 值是随机确定的(没有意义,只是为文本绘图提供第二个维度目的)。不使用ggrepel,文中有明显重叠:

library(ggrepel)
library(ggplot2)
set.seed(1)
data = data.frame(x=runif(100, 1, 10),y=runif(100, 1, 10),label=paste0("label",seq(1:100)))
origPlot <- ggplot(data) +
  geom_point(aes(x, y), color = 'red') +
  geom_text(aes(x, y, label = label)) +
  theme_classic(base_size = 16)

Original plot

我可以使用ggrepel修复文本重叠,如下所示。但是,这不仅会更改 y 值,还会更改 x 值。我试图避免更改 x 值,因为它们代表了实际的物理意义(气缸数):
repelPlot <- ggplot(data) +
  geom_point(aes(x, y), color = 'red') +
  geom_text_repel(aes(x, y, label = label)) +
  theme_classic(base_size = 16)

enter image description here

请注意,我不能允许文本的 x 值改变的原因是因为我只是在绘制文本(而不是点)。然而,似乎 ggrepel 中的大多数示例都保留了点的位置(以便它们的值保持为真),并且只排斥标签的 x 和 y 值。然后,将点和连接到带有段的标签(您可以在我的第二个绘图示例中看到)。

出于演示目的,我保留了上面两个示例中的要点。但是,我只保留文本(因此将删除点和段),给我留下这样的东西:
repelPlot2 <- ggplot(data) + geom_text_repel(aes(x, y, label = label), segment.size = 0) + theme_classic(base_size = 16)

enter image description here

我的问题有两个:

1) 我可以只在 y 方向排斥文本标签吗?

2)我是否有可能获得包含文本的新(排斥)y 值的结构?

感谢您的任何建议!

最佳答案

我认为使用 ggrepel 不可能只在一个方向上排斥文本标签。 .

我会以不同的方式解决这个问题,而是手动生成任意 y 轴位置。例如,对于示例中的数据集,您可以使用以下代码执行此操作。

我用过 dplyr包以按 x 的值对数据集进行分组,然后新建一列数据 y包含每个组中的行号。然后将行号用作 y 轴的值。

library(ggplot2)
library(dplyr)

data <- data.frame(x = mtcars$cyl, label = paste0("label", seq(1:32)))

data <- data %>% 
  group_by(x) %>% 
  mutate(y = row_number())

ggplot(data, aes(x = x, y = y, label = label)) + 
  geom_text(size = 2) + 
  xlim(3.5, 8.5) + 
  theme_classic(base_size = 8)

ggsave("filename.png", width = 4, height = 2)

enter image description here

关于r - ggrepel : Repelling text in only one direction, 并返回排斥文本的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188707/

相关文章:

r - 从具有平均值的计算值分组 geom_boxplot

r - 在 ggmap 上叠加 ggplot、geom_polygon choropleth 会出现错误

sql - 使用 SQL 来转换和组合字符串

algorithm - 关联词接近度

c - 从文本文件中读取数字并将其用作输入

r - 在ggplot中拟合二次曲线

r - 查看两个变量的符号是否不同 - 满足 R 中的条件

dplyr 中 summarise() 函数的逆向

r - 如何在不同的数据框中找到共同的变量?

R:ggplot2 中 geom_rect 的渐变填充