R 中的 Geom_text() - 如何更改 geom_point 中特定点的标签位置

Geom_text() in R - how to change a label position of a specific dot in geom_point

我正在努力更改 ggplot geom_point 中几个点标签的位置。到目前为止,我的代码:

p <- ggplot(all_short_filled, aes(x=Modernization, y=Passionate_love)) + 
  geom_point(size=2)+geom_abline(intercept = 0.965830, slope = -0.001127)+  theme_bw()

p1 <- p + geom_text(label=all_short_filled$Country, position = position_dodge(width = 1),
                    vjust = -0.5)
p1

它给了我这样的东西: 我想更改一些重叠标签的位置(例如俄罗斯和塞尔维亚,或荷兰和比利时,这样,例如,塞尔维亚的标签将位于点下方,而不是上方)。请发送帮助:-)

您可以在数据集中创建两个标签列:一个用于应绘制在其点上方的国家,另一个用于绘制点下方。由于我没有您的数据样本,因此我使用 mtcars 数据集创建了一个可重现的示例:

这将要求您知道哪些国家/地区并且是硬编码的。

library(datasets) # used to create fake data
library(tidyverse)

# create fake dataset for example
df <- tail(datasets::mtcars) %>% 
  tibble::rownames_to_column("car")

below <- c("Ferrari Dino", "Maserati Bora")

# create two columns for geom_text labels
data <- df %>% 
  dplyr::mutate(label_above = ifelse(car %in% below, "", car),
                label_below = ifelse(car %in% below, car, ""))

# ignore scale_x.. and scale_y.. those were to fit points/labels neatly
ggplot2::ggplot(data, aes(x = hp, y = mpg)) + 
  geom_point() + 
  geom_text(aes(label = label_above), vjust = -0.5) + # labels above their points
  geom_text(aes(label = label_below), vjust = 1) +  # labels below their points
  scale_x_continuous(expand = ggplot2::expansion(0.3)) + 
  scale_y_continuous(expand = ggplot2::expansion(0.15))

话虽如此,如评论中所述ggrepel通常很擅长处理这种事情。