1

一旦 a 中的点geom_violin分布 via geom_sina,然后标记为 viageom_label_repel或 even geom_label,该线就指向 x 轴类别的中线。有没有办法知道geom_label_repel甚至geom_label知道重点在哪里geom_sina

例子:

library(dplyr)
library(ggforce)
library(ggplot2)
library(ggrepel)

ggplot(midwest, aes(state, area)) +
  geom_violin() +
  geom_sina() +
  geom_label_repel(box.padding = 0.5, min.segment.length = 0.5, aes(label = county), data=midwest %>% subset(poptotal>1000000), size=3)

在此处输入图像描述

您可以看到标签中的线始终指向中线,但看不到点(请参阅密歇根州的 WAYNE 和奥克兰县)。

4

1 回答 1

1

我还没有看到对这类问题的满意答案。我见过的一般方法是使用映射转换创建绘图,然后提取转换后的值,然后使用这些转换后的值绘制图层。

编辑:在每轮绘图之前添加 set.seed

library(tidyverse)
set.seed(0)
a <- ggplot(midwest, aes(state, area)) +
  geom_violin() +
  geom_sina()
  
a_guts <- ggplot_build(a)$data[[2]] %>% 
  bind_cols(midwest %>% 
              mutate(state_num = as.integer(as.factor(state))) %>%
              select(state_num, area, county, poptotal)) %>% 
  subset(poptotal>1E6)


set.seed(0)
a + geom_point(data = a_guts, aes(x = x, y = y), 
               size = 3, color = "red", shape = 22, fill = NA) +
  geom_label_repel(data = a_guts,
                   aes(x = x, y = y, label = county), color = "red",
                   box.padding = 2, min.segment.length = 0.5, size=3)

在此处输入图像描述

于 2021-10-08T19:12:42.350 回答