#r #ggplot2 #label #axis #fixed
#r #ggplot2 #метка #ось #исправлено
Вопрос:
Скажем, у меня есть такой график:
library(ggplot2)
dat <- data.frame(x = 1:10, y = 1:10)
ggplot(dat, aes(x = x, y = y))
geom_point()
xlab("Test label")
ggplot2
Позволяет ли фиксировать xlab
позиционирование в определенной точке? Допустим, я хотел, чтобы метка отображалась по центру в точке, где x = 7
(а не центрирование по умолчанию).
Ответ №1:
Вот другой способ, но тот, что от @Gregor Thomas, лучше
library(ggplot2)
dat <- data.frame(x = 1:10, y = 1:10, label = 'Test label')
p <- ggplot(dat, aes(x = x, y = y))
geom_point()
xlab('') # no x-label
#xlab("Test label")
p geom_text(aes(label = label, x = 7, y = -Inf), vjust = 3)
coord_cartesian(clip = 'off') # This keeps the labels from disappearing
Комментарии:
1. Спасибо и вам за ваш ответ! Как вы сказали, я решил пойти с Грегором, так как он был немного более чистым.
2. Это хороший способ фактически использовать координаты данных — 1. Однако вы переигрываете (отсюда и странный жирный вид этикетки). Чтобы избежать этого, либо установите
check_overlap = TRUE
insidegeom_text
, либо рассмотрите возможность использованияannotate(geom = "text", ...)
вместо него. (annotate
вероятно, это более канонический способ сделать это.)
Ответ №2:
Это не совсем то, что вы хотите, но вы можете настроить выравнивание по горизонтали в theme
настройках. Это относительное значение между 0 и 1, не привязанное к координатам данных. 0
выравнивается по левому краю (левая сторона оси), 1
выравнивается по правому краю и по умолчанию 0.5
центрируется. В этом случае мы можем установить hjust = 0.7
. (Хотя ось от 1 до 10 имеет длину 10-1 = 9, поэтому мы могли бы придраться и использовать (7 - 1) / (10 - 1) = 2/3
… Я оставлю это на ваше усмотрение, насколько точным вы хотите быть.)
ggplot(dat, aes(x = x, y = y))
geom_point()
xlab("Test label")
theme(axis.title.x = element_text(hjust = 0.7))
Комментарии:
1. Спасибо тебе, Грегор! Это должно сработать!