5

好的,所以我有一个包含 2 个变量 X 和 Y 以及一个 ID 变量的数据集。我使用以下代码创建了一个完整的情节:

ggplot(data = X_Y) + 
  geom_point(mapping = aes(x = X, y = Y))+
  geom_text_repel(mapping = aes(x = X, y = Y, label = ID))+
  xlim(0,100)+
  ylim(0,100)

这会产生这样的情节: 在此处输入图像描述

我现在希望创建多个单独的图,一次只显示一个带有标签的数据点。

现在我可以只使用 geom_label 而不排斥并轻推标签来获得这个: 在此处输入图像描述

虽然这个情节还可以,但我想知道是否有任何方法可以保持将标签连接到点的线条,就像 ggrepel 所做的那样......

编辑

从第一个建议开始,当我尝试使用仅选择一个案例的排斥时,我得到以下情节:

ggplot(data = X_Y) + 
  geom_point(aes(x = X[4], y = Y[4]))+
  geom_label_repel(aes(x = X[4], y = Y[4]), 
                   label = "You are here",
                   min.segment.length = unit(0, 'lines'),
                   nudge_y = 6)+
  labs(x = "X",y = "Y",title = "mytitle")+
  scale_x_continuous(limits = c(0, 100)) +
  scale_y_continuous(limits = c(0, 100))

在此处输入图像描述

解决

弄清楚了!我需要在 ggplot() 中指定我的数据仅为 X 和 Y 变量并限制为感兴趣的行。

像这样:

ggplot(data = X_Y[4,c(3,4)) + 
  geom_point(aes(x = X, y = Y))+
  geom_label_repel(aes(x = X, y = Y), 
                   label = "You are here",
                   min.segment.length = unit(0, 'lines'),
                   nudge_y = 6)+
  labs(x = "X",y = "Y",title = "mytitle")+
  scale_x_continuous(limits = c(0, 100)) +
  scale_y_continuous(limits = c(0, 100))
4

1 回答 1

5

您当然仍然可以使用geom_label_repel,即使是单点。为确保绘制线段,请调整min.segment.lengtharg。此参数设置从点到标签的最小距离以绘制线段,将其设置为unit(0, 'lines')确保绘制每个线段:


library(ggplot2)
library(ggrepel)

ggplot(data.frame(x = 2, y = 3)) +
    geom_point(aes(x, y)) +
    geom_label_repel(aes(x, y), 
                     label = 'You are here', 
                     min.segment.length = unit(0, 'lines'), 
                     nudge_y = .2) +
    scale_x_continuous(limits = c(0, 3)) +
    scale_y_continuous(limits = c(0, 4))

于 2017-04-20T13:25:54.907 回答