2013-07-22 15 views
24

Ich versuche ein Png-Diagramm mit ggplot2 und ggsave (mit Cairo) in R zu erstellen. Ich habe ein Problem mit der Anpassung des Themas, um Ränder zu entfernen.Plot-Ränder entfernen in ggplot2

Derzeit verwenden ich:

... + theme(plot.margin=unit(c(0,0,0,0),"mm"))  

Das für zwei von vier Seiten meiner Handlung zu funktionieren scheint, ist es die oberen und rechten Seitenrand vollständig entfernt, aber es gibt immer noch eine ziemlich große Marge auf der linken und unteren Seite. Gibt es eine Möglichkeit, diese vollständig zu entfernen? Bild unten zu veranschaulichen das Problem:

enter image description here

Wenn ein reproduzierbares Beispiel nützlich wäre, dann lassen Sie mich wissen und ich werde eine zusammen.


Edit:

library("ggplot2") 
library("scales") 
library("Cairo") 
library("grid") 

# Set chart values 
line.width = 0.45 
axis.font.size = 2.9 

# Generate some random data 
start.date <- as.Date("2011-07-01") 
x.month <-seq.Date(start.date, by = "month", length.out = 24) 
end.date <- max(x.month) 

period.a <- rnorm(12, mean=50, sd=2) 
period.b <- rnorm(12, mean=55, sd=2) 

x.value <- c(period.a,period.b) 

# Combine into dataframe 
x.data <- data.frame(
    "Month" = x.month, 
    "Value" = x.value 
) 

# Build chart 
p <- ggplot(data=x.data, aes(Month, Value)) + geom_line(size=line.width) 
p <- p + theme_bw() 
p <- p + scale_y_continuous() 
p <- p + scale_x_date(limits=c(start.date+20,end.date-20), breaks = "1 month",labels = date_format("%b-%y")) 
p <- p + theme(axis.text.x=element_text(angle=90, hjust=1, vjust=0.5, size=axis.font.size), 
       axis.text.y=element_text(size=axis.font.size), 
       axis.title.x=element_blank(), 
       axis.title.y=element_blank(), 
       plot.margin=unit(c(0,0,0,0),"mm"), 
       plot.background = element_rect(fill = "grey"), 
       panel.grid=element_blank(), 
       panel.border=element_rect(size=line.width/2), 
       axis.ticks=element_line(size=line.width/3), 
       axis.ticks.length=unit(0.3, "mm"), 
       axis.ticks.margin=unit(0.2, "mm")) 

ggsave(file="c:\\temp\\test.png", plot=p, width=40, height=15, units="mm", type ="cairo-png") 

Antwort

17

Nach the source code, müssen Sie auch die Etiketten auf NULL gesetzt,

last_plot() + labs(x=NULL, y=NULL) 

alternativ eingestellt unit(-0.5, "line") für den unteren und linken Rand.

+4

Ja, oder '' xlab (NULL) '', um ein Etikett zu steuern. Der häufiger auftretende '' xlab ("") '', wie '' axis.title.x = element_blank() '', entfernt den Text, aber nicht das Leerzeichen, afaik. Und in der Tat bestätigt die Zeile 56, wenn sie dem Link des Baptisten folgt, dies: "if (is.null (labels $ x)) unit (0," lines ") else unit (0.5," lines ")" – PatrickT

+0

dies kann auch sein Hilfe: http://stackoverflow.com/questions/22945651/how-to-remove-space-between-axis-area-plot-in-gplot2 –