ggplot2 R исправить метку оси x в определенной точке относительно графика

#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 inside geom_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. Спасибо тебе, Грегор! Это должно сработать!