Метки осей с выравниванием по левому краю при использовании коровьего графика для переключения оси x наверх

Я пытаюсь создать тепловую карту корреляции, где ось x перемещается вверх с помощью cowplot::switch_axis_position. У меня есть метки оси разной длины, и я хочу, чтобы метки были выровнены по левому краю (или, скорее, по нижнему краю, потому что они повернуты на 90 градусов). Хотя мне удается выровнять метки, они сдвинуты намного выше графика.

library(reshape2)
library(ggplot2)
library(cowplot)

# some toy data
set.seed(1)
mydata <- mtcars[, c(1, 3, 4, 5, 6, 7)]

# to show difference in justification better, make names of unequal length 
names(mydata) = paste0(sample(c("mtcars_", ""), 6, replace = TRUE), names(mydata))
cormat <- round(cor(mydata), 2)

melted_cormat <- melt(cormat)
head(melted_cormat)

Сначала график, на котором ось x перемещена вверх, а метки центрированы по вертикали:

plot <- ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
        geom_tile() +
        theme_bw(base_size=20) + xlab("") + ylab("") +
        theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 0.5))
ggdraw(switch_axis_position(plot, 'x'))

ссылка

Затем я использую тот же код, что и выше, но с hjust = 0 вместо выравнивания по левому краю текста оси x. Он действительно выравнивает текст, но текст странно перемещен далеко от графика, поэтому имена переменных обрезаются: ссылка

Есть идеи, как это исправить?


person Esther    schedule 17.02.2016    source источник


Ответы (1)


Обратите внимание: этой ошибки больше нет в последней версии cowplot на CRAN.

Старый ответ:

Похоже, это ошибка особого случая angle = 90. Мы можем обойти это, добавив сколь угодно малое значение к angle.

plot <- ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile() + theme_bw(base_size=20) + xlab("") + ylab("")+
  theme(axis.text.x=element_text(angle=90 + 1e-09, hjust = 0, vjust=1)) +
  coord_equal(expand = 0)
ggdraw(switch_axis_position(plot, 'x'))

введите описание изображения здесь

person Axeman    schedule 17.02.2016
comment
Отлично. Я только что закончил свой ответ, указав имена столбцов padded_out и изменив семейство шрифтов на моно .... но это намного лучше. - person Mike Wise; 17.02.2016
comment
Ха-ха, не знаю, почему это работает. Я пишу о проблеме с github. - person Axeman; 17.02.2016
comment
Вы должны зарегистрировать это как ошибку, я думаю, вы можете сослаться на этот пост. - person Mike Wise; 17.02.2016
comment
Благодарю. это странно. Есть ли способ также выровнять метки по центру галочки? возможно нет? - person Esther; 17.02.2016
comment
Вы можете поиграть со значениями vjust немного ниже 1, чтобы приблизить их, но, похоже, вам придется искать компромисс между центрированием и расстоянием от оси. Совершенно непредсказуемое поведение! - person Axeman; 17.02.2016