ggrepel:仅在一个方向排斥文字,并返回排斥文字的值

前端之家收集整理的这篇文章主要介绍了ggrepel:仅在一个方向排斥文字,并返回排斥文字的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数据集,其中每个数据点都有一个被约束的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,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)

我可以使用ggrepel来补救文本重叠,如下所示.但是,这不仅改变了y值,还改变了x值.我试图避免改变x值,因为它们代表实际的物理含义(气缸数):

repelPlot <- ggplot(data) +
  geom_point(aes(x,color = 'red') +
  geom_text_repel(aes(x,label = label)) +
  theme_classic(base_size = 16)

作为一个说明,我不能允许文本的x值改变的原因是因为我只绘制文本(而不是点).然而,ggrepel中的大多数示例似乎保持了点的位置(使得它们的值保持为真),并且仅排斥了标签的x和y值.然后,点和连接到标签的段(你可以看到在我的第二个情节例子).

为了演示,我在上面的两个例子中保留了分数.但是,我只保留文本(因此将删除分数和分数),让我有这样的一些东西:

repelPlot2 <- ggplot(data) + geom_text_repel(aes(x,label = label),segment.size = 0) + theme_classic(base_size = 16)

我的问题是双重的:

1)我是否可以在y方向排斥文字标签

2)我可以获得一个包含文本的新(排斥)y值的结构吗?

谢谢任何建议!

解决方法@H_403_34@
ggrepel版本0.6.8(使用devtools :: github_install从GitHub安装)现在支持一个“direction”参数,它只能以“x”或“y”方向排斥标签.

repelPlot2< - ggplot(data)geom_text_repel(aes(x,segment.size = 0,direction =“y”)theme_classic(base_size = 16)
获取y值更难 – 一种方法可以是使用ggrepel中的“repel_Boxes”函数获取排斥值,然后使用geom_text将它们输入到ggplot中.有关该方法的讨论和示例代码,请参见https://github.com/slowkow/ggrepel/issues/24.请注意,如果使用最新版本,repel_Boxes函数现在也有一个“direction”参数,它包含“both”,“x”或“y”.

原文链接:https://www.f2er.com/html/229226.html

猜你在找的HTML相关文章