2015-02-24 2 views
4

Я разрабатываю пользовательскую тему ggplot, которая включает в себя горизонтально повернутые метки оси Y, и я хочу увеличить расстояние между метками метки и метками оси. This post предлагает настроить параметр vjust, но это не подходит в этом случае. Выравнивание (например, левое или правое в поле) отличается от интервала этого поля относительно метки метки.Как увеличить расстояние между текстом и заголовком на * повернутом * оси y в ggplot?

Например, с axis.title.y=element_text(angle=0, vjust=1, hjust=1)), то я получить правильное выравнивание, но это слишком близко к клещу этикеткам:

image with hjust=1

Если установить hjust=2 то текст больше не правильно покраснело право:

image with hjust=2

Я играл с параметрами темы margin, но я не думаю, что они применимы здесь. Есть идеи?

EDIT Вот простой MWE для тестирования по запросу:

df <- data.frame(x=1:10, y=1:10) 
ggplot(df, aes(x,y)) + 
    geom_line() + 
    theme(axis.title.y=element_text(angle=0, vjust=1, hjust=1)) + 
    labs(y="This\nis a\nreally long\naxis\nlabel") 
+0

Было бы неплохо иметь воспроизводимый пример для тестирования решений. – tonytonov

ответ

3

Я понял это в конце концов, и это требует настройки основной gtable.

library(ggplot2) 
library(grid) 
library(gtable) 
df <- data.frame(x=1:10, y=1:10) 
gg <- ggplot(df, aes(x,y)) + 
    geom_line() + 
    theme(axis.title.y=element_text(angle=0, vjust=1, hjust=1)) + 
    labs(y="This\nis a\nreally long\naxis\nlabel") 

# Get the table for the ggplot object 
g <- ggplotGrob(gg) 

# Insert a new column 0.25 inches wide after the second column 
# Use gtable_show_layout(g) to figure out which column number to use 
g2 <- gtable_add_cols(g, width=unit(0.25, "in"), pos=2) 

# Plot the result 
grid.draw(g2) 
0

Вы можете использовать plot.margin в опции темы. Вы можете установить, что ваш hjust должен быть -10, а затем изменить последнюю цифру в plot.margin (аргументы вверх, справа, бот, слева).

Try, например:

библиотека (сетка)

df <- data.frame(x=1:10, LongAxisLabel=1:10) 
ggplot(df, aes(x,LongAxisLabel)) + 
    geom_line() + 
    theme(axis.title.y=element_text(angle=0, vjust=1, hjust=-1))+ 
    theme(plot.margin = unit(c(1,1,1,1), "cm")) 

Cheers, Romain


После запроса по этому вопросу выравнивания. Я обновил код с помощью функции expression(), которую я наложил на ярлык. См. Ниже, и я получаю, я думаю, что-то по тому, что вы хотели. Дайте нам знать.

library(grid) 
df <- data.frame(x=1:10, y=1:10) 
ggplot(df, aes(x,y)) + 
    geom_line() + 
    theme(axis.title.y=element_text(angle=0, vjust=1, hjust=-1), plot.margin=unit(c(3,1,1,3), "cm")) + 
    labs(y=expression("This\nis a\nreally long\naxis\nlabel")) 

enter image description here

+0

Это не работает. Попробуйте следующее, и вы увидите, что дополнительные строки неправильно выровнены правильно. 'ggplot (df, aes (x, y)) + geom_line() + theme (axis.title.y = element_text (angle = 0, vjust = 1, hjust = -1), plot.margin = unit (c (1 , 1,1,1), "cm")) + labs (y = "Это \ nis a \ nreally long \ naxis \ nlabel") ' – jkeirstead

+0

Привет @jkeirstead Я обновил приведенный выше ответ, взгляните, посмотрите, которые фиксируют ваш pb. – Romain

+0

Спасибо, но, к сожалению, этот код просто увеличивает пространство слева от названия оси. Как и на приведенных выше рисунках, я ищу выравниваемый текст с пробелом * между * названием оси и метками тика. – jkeirstead

Смежные вопросы