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
通常很擅长处理这种事情。
我正在努力更改 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
通常很擅长处理这种事情。