2016-03-14 68 views
0

我繪製了很多直方圖(一個用於數據集中的每個變量)看起來像這樣:將gomplot添加到ggplot的自定義函數?

ggplot(data = df, aes(x = var)) + 
    geom_histogram(binwidth = 0.5) + 
    scale_x_continuous(breaks = seq(4, 16, 1), limits = c(4, 16)) + 
    geom_vline(aes(xintercept=mean(var)), color="red", linetype="dashed", size=1) + 
    geom_vline(aes(xintercept=median(var)), color="blue", size=1) + 
    geom_vline(aes(xintercept=quantile(var,0.25)), color="green", linetype="dotted", size=1) + 
    geom_vline(aes(xintercept=quantile(var,0.75)), color="green", linetype="dotted", size=1) 

唯一覺得變化是bindwidth,休息和限制。 我可以在R中編寫一個自定義函數,將所有這些geom_vline添加到任何繪圖並避免樣板文件?

喜歡的東西:

ggplot(data = df, aes(x = var)) + 
    geom_histogram(binwidth = 0.5) + 
    scale_x_continuous(breaks = seq(4, 16, 1), limits = c(4, 16)) + 
    stat_lines(df, var) 

我嘗試了返回所有geom_vline的串聯,但我得到:

Error in df[, var] : object of type 'closure' is not subsettable 

回答

0
addGeomVline<-function(plot,...){ 
plot+geom_vline(...) 
} 

下面是關於如何用一個例子就

p<-qplot(x=1:3,y=1:3) 
addGeomVline(p,xintercept = 5) 
+0

謝謝。我想是一個不同的問題,但是:我如何訪問用於X軸的列?所以我不需要把它作爲一個論點。我試圖用plot $ mapping $ x但它不起作用,顯然它只是一個符號,而不是數據列... – karmapolice

+0

訪問它做什麼? – adaien

+0

因此,我可以使用xintercept的平均值,而不是某個固定值。 – karmapolice