因此,我试图使用新的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值的结构吗?
谢谢任何建议!
解决方法
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”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。