如何将 geom_sina 点的位置与 geom_text_repel 对齐
How to align position of geom_sina point with geom_text_repel
一旦 geom_violin
中的点通过 geom_sina
分布,然后通过 geom_label_repel
甚至 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 和 OAKLAND 县)。
对于这类问题,我还没有看到满意的答案。我见过的一般方法是使用映射转换创建绘图,然后提取转换后的值,然后使用这些转换后的值绘制图层。
编辑:在每轮绘图前添加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)
一旦 geom_violin
中的点通过 geom_sina
分布,然后通过 geom_label_repel
甚至 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 和 OAKLAND 县)。
对于这类问题,我还没有看到满意的答案。我见过的一般方法是使用映射转换创建绘图,然后提取转换后的值,然后使用这些转换后的值绘制图层。
编辑:在每轮绘图前添加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)