2012-08-31 16 views
11

Jeśli spojrzeć na wykresy here! możesz zobaczyć, że jest dużo białego miejsca powyżej i poniżej legendy. Chcę zmniejszyć ilość miejsca.Przestrzeń nad i pod legendą za pomocą ggplot2

Przykładowy kod:

library(ggplot2) 
library(gridExtra) 
library(reshape) 
library(plyr) 
library(scales) 

theme_set(theme_bw()) 

rows <- 1:nrow(faithful) 
data <- cbind(faithful, rows) 
molten <- melt(data, id.vars='rows', measure.vars=c('eruptions', 'waiting')) 

p <- ggplot() + 
    geom_line(data=molten, 
     mapping=aes(x=rows, y=value, group=variable, colour=variable), size=0.8) + 
    scale_colour_manual(values=c('red','blue')) + 
    opts(title='Title') + 
    xlab(NULL) + ylab('Meaningless Numbers') + 
    opts(
     legend.position='bottom', 
     legend.direction='horizontal', 
     legend.title=theme_blank(), 
     legend.key=theme_blank(), 
     legend.text=theme_text(size=9), 
     legend.margin = unit(0, "line"), 
     legend.key.height=unit(0.6,"line"),  
     legend.background = theme_rect(colour='white', size=0) 
    ) 

ggsave(p, width=8, height=4, filename='crap.png', dpi=125) 

Odpowiedz

3

Oto dwie dodatkowe opcje, które pozwalają zmniejszyć przestrzeń otacza napis:

p + opts(
     legend.key.height=unit(0, "cm"),  
     plot.margin = unit(c(1,0.5,0,0.5), "lines") 
    ) 

Opcja plot.margin opisuje jak dużo miejsca jest wokół samej działce . Trzeci argument opisuje ilość miejsca pod działką. Ustawienie na zero pomaga.

enter image description here

+0

Więc, zasadniczo, mówisz mi, że wokół legendy nie mogę się pozbyć? Mogę tylko sprawić, żeby niektóre z nich wyglądały, jakby ich tam nie było. –

+0

Nie mówię, że jest podszewka, której nie można się pozbyć. Mówię tylko, że moje rozwiązanie jest najlepsze, co mogę zrobić. Bez wątpienia ktoś może zrobić coś lepszego. – Andrie

9

Aby usunąć marginesy legendy (wartości ujemne zmniejszają spacje nawet więcej):

p + theme(legend.margin=margin(t=0, r=0, b=0, l=0, unit="cm")) 
p + theme(legend.margin=margin(t=0, r=0, b=-0.5, l=0, unit="cm")) 

Można również usunąć dolną część marży działki przez podanie liczb ujemnych (ale upewnij się, że nie odciąć swoją legendę):

p + theme(plot.margin = unit(x = c(0, 0, -0.2, 0), units = "cm") 

Ilustracje: ggplot2, legend on top and margin

Powiązane problemy