Я часто обнаруживаю, что хочу выровнять метки оси X на своих графиках по-разному в зависимости от их местоположения, со значениями слева, выровненными по левому краю, и значениями справа, выровненными по правому краю. Однако element_text
не имеет официальной поддержки векторизованного ввода (и никогда не будет?), поэтому мне интересно, как решить эту проблему надлежащим образом ggplot2
.
Проблема: перекрывающиеся метки оси X (и обрезанные справа)
library(ggplot2)
v <- data.frame(x=1:2, y=1:2, facet=gl(2, 2))
gp <- ggplot(v) +
geom_point(aes(x=x, y=y)) +
scale_x_continuous(breaks = 1:2, labels = c("Minimum", "Maximum")) +
facet_wrap(~facet)
gp
Мое решение:
gp + theme(axis.text.x = element_text(hjust=c(0, 1)))
Кроме:
Warning message:
Vectorized input to `element_text()` is not officially supported.
ℹ Results may be unexpected or may change in future versions of ggplot2.
Как правильно по-разному выровнять текст в ggplot, если векторизованный element_text
не поддерживается?
Клаус Уилке заявляет здесь, что его пакет ggtext действительно поддерживает использование векторов таким образом и продолжит поддерживать его в будущем. Как говорит thomasp85 (Томас Лин Педерсен) в ветке «FWIW, я думаю, что большинство вариантов использования этого хака можно правильно решить с помощью element_markdown()», т.е.
library(ggplot2)
library(ggtext)
v <- data.frame(x=1:2, y=1:2, facet=gl(2, 2))
gp <- ggplot(v) +
geom_point(aes(x=x, y=y)) +
scale_x_continuous(breaks = 1:2, labels = c("Minimum", "Maximum")) +
facet_wrap(~facet)
gp
gp +
theme(axis.text.x = element_markdown(hjust = c(0, 1)))
Created on 2023-04-11 with reprex v2.0.2
Отличный момент; Я не думаю, что это плохая идея, просто это не «стандартный» вариант использования. Основываясь на ветке обсуждения на github, код ggtext предназначен для поддержки векторизованных входных данных, а код ggplot2 — нет (и они планируют отказаться от этого «хака» для element_text()
в будущем), поэтому, возможно, стоит опубликовать запрос функции и посмотреть то, что они говорят.
После еще нескольких поисков, похоже, что проблемы, которые у меня были, уже поднимались и считались не стоящими реализации - эта проблема говорит в основном то же самое, что и я, и «официальный» ответ, похоже, таков, что это не собирается произойдет, и нам просто нужно держать пальцы скрещенными, чтобы ggtext
не исчезло. Спасибо за вашу помощь!
Хм, я надеялся на что-то, что не требует загрузки дополнительной библиотеки. Мне любопытно, как команда
ggplot2
видит, как это должно происходить. Это просто плохая идея, потому что метки смещены от галочек? Похоже, это просто техническая проблема, так стоит ли открывать запрос функции на GitHub, даже если они уже знают, что это крайний случай?