2012-06-11 18 views
11

W ggplot2 wersja 0.9 zmieniło się zachowanie wyrównania tytułu fabuły. Natomiast w v0.8.9 wyrównanie było względem okna wykresu, w v0.9 wyrównanie jest odniesione do siatki kreślenia.Jak wyrównać tytuł ggplot z oknem, a nie z siatką wydruku?

Teraz, podczas gdy w większości zgadzam się, że jest to pożądane zachowanie, dość często mam bardzo długie tytuły fabularne.

Pytanie: Czy istnieje sposób wyrównania tytułu fabuły do ​​okna wykresu, a nie do siatki działki?

Szukam rozwiązania, które wykonuje automatyczne wyrównanie działki. Innymi słowy, ręczne wyrównanie przy użyciu hjust nie będzie działać dla mnie (uruchamiam to na setkach wykresów dla każdego projektu).

Każde rozwiązanie, które zostało użyte bezpośrednio pod adresem grid, jest również dopuszczalne.


Niektóre przykładowy kod i wykres: (zauważ, jak tytuł zostanie obcięty po prawej stronie okna).

dat <- data.frame(
    text = c(
    "It made me feel very positive to brand X", 
    "It was clear and easy to understand", 
    "I didn't like it al all"), 
    value=runif(3) 
) 
library(ggplot2) 
ggplot(dat, aes(text, value)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    opts(title="Thinking about the ad that you've just seen, do you agree with the following statements? I agree that...") + 
    theme_bw(16) 

enter image description here

Odpowiedz

13

W ggplot2 0,9 można łatwo zmienić układ.

p <- ggplot(dat, aes(text, value)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    opts(title="Thinking about the ad that you've just seen,\ndo you agree with the following statements?\nI agree that...") + 
    theme_bw(16) 

gt <- ggplot_gtable(ggplot_build(p)) 
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1, max(gt$layout$r)) 
grid::grid.draw(gt) 

Być może w przyszłej wersji ggplot2 zapewni spójne interfejsy do ulepszenia układu.

enter image description here

+0

Dziękuję. Jest to bardzo pomocne. – Andrie

+0

można również zmienić obcięcie, zmieniając klip na fałsz. – baptiste

+3

Czy ktoś wie, czy jest łatwiejszy sposób to zrobić z ggplot2_2.2.0? – MatthewR

0

Oto roztworu w ggplot2 2.2.1. Funkcja ustawia obiekt tekstowy na środku ggplota.

library(ggplot2) 
library(grid) 
library(gridExtra) 

# A function that puts a title text object centered above a ggplot object "p" 
add_centered_title <- function(p, text, font_size){ 

    title.grob <- textGrob(
    label = text, 
    gp = gpar(fontsize = font_size) 
) 
    p1 <- arrangeGrob(p, top = title.grob) 
    grid.draw(p1) 
} 

# Create the chart from your sample data 
test_chart <- ggplot(dat, aes(text, value)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    theme_bw(16) 

# Usage: 
add_centered_title(test_chart, 
        "Thinking about the ad that you've just seen, do you agree with the following statements? I agree that...", 
        10) 

# Or you can pipe a ggplot into this function using the %>% dplyr pipe: 
library(dplyr) 
test_chart %>% 
    add_centered_title("Thinking about the ad that you've just seen, do you agree with the following statements? I agree that...", 
        10) 
Powiązane problemy