一个标签可表示多个点

时间:2019-06-29 21:08:49

标签: r ggplot2 ggrepel

我正在制作散点图,并希望用相同的标签标记多个点。

data.frame(label=rep(c("a","b","c"),2), x=rep(c(1:3),2), y=(5,4,7,2,6,9))

如您所见,标签在相同的x值处各出现两次,只有y不同。我希望[1,5][1,2]都用一个“ a”标记,而不是每个坐标都用一个“ a”标记。

我正在使用R,ggplot2和ggrepel。

enter image description here

2 个答案:

答案 0 :(得分:1)

我想这就是你想要的。

我正在使用dplyr或tidyverse软件包。

library(tidyverse)

数据集

dat1 <- data.frame(label=rep(c("a","b","c"),2), x=rep(c(1:3),2), y=c(5,4,7,2,6,9))

为标签创建数据集。这将创建一个标签数据集,该标签数据集将在给定X的中点Y处选择一个标签点。

lab1 <- dat1 %>% group_by(label) %>% mutate(x = x, y = mean(y))

这将使用原始数据集(用于点)和标签数据(用于标签)创建图。

ggplot() + 
geom_point(data=dat1, aes(x=x, y=y)) +
geom_text(data=lab1, aes(x=x, y=y, label=label), size = 5) +
theme_grey()

One Label!

以上内容实际上是两次将标签相互重叠绘制,但您不会注意到。如果您真的只想要一次,则可以执行以下操作,并使用lab2更新以前的代码。我还更改了大小,以便您查看。

lab2 <-unique(lab1)

ggplot() + 
geom_point(data=dat1, aes(x=x, y=y)) + 
geom_text(data=lab2, aes(x=x, y=y, label=label), size=10) +
theme_grey()

如果您希望x方向更向右或更高,则可以通过向标签数据集添加偏移量来更新标签数据集。

lab1 <- dat1 %>% group_by(label) %>% mutate(x = x+.3, y = mean(y) + .5)

或者您也可以使用nudge在geom_text本身中完成相同的操作。

ggplot() + geom_point(data=dat1, aes(x=x, y=y)) + 
geom_text(data=lab1, aes(x=x, y=y, label=label), size=10, nudge_x = .3, nudge_y = .5) + 
theme_grey()

Label With Offset

答案 1 :(得分:0)

这可以工作:

dat <- data.frame(label=rep(c("a","b","c"),2), x=rep(c(1:3),2), y=c(5,4,7,2,6,9))

ggplot() + geom_point(data=dat, aes(x=x, y=y)) + geom_text(data=dat[duplicated(dat$label),], aes(x=x, y=y, label=label))