2
我想參數化ggplot2
繪圖創建的一系列函數以減少冗餘。下面我有它沒有參數化函數的樣子(和工作),我嘗試這樣做。使參數化函數返回一個函數來評估
我試圖捕獲和傳遞參數值在功能markvline()
geom_vline()
和geom_text()
,但我想打電話給markvline()
內嵌在qplot()
功能並返回geom_vline() + geom_text()
作爲參數,使他們能夠得到評估,並做與第一部分所做的相同。
我假設我需要理解quote/eval /替代一點點,但我不會在這一點上。任何幫助表示讚賞,我將如何構造markvline()
等同於調用geom_vline() + geom_text()
,並填寫參數。
library(ggplot2)
## This works
## Making labeled vertical lines at 5 and 6
qplot(Sepal.Length, Sepal.Width, data=iris) +
geom_vline(xintercept=5, color="red", size=1) +
geom_text(x=5, y=4, label="5", hjust=0) +
geom_vline(xintercept=6, color="red", size=1) +
geom_text(x=6, y=4, label="6", hjust=0)
## I would like to parameterize these two statements
markvline <- function(e) {
geom_vline(xintercept=e, color="red", size=1) +
geom_text(x=e, y=4, label=as.character(e), hjust=0)}
## ... but this does not work
qplot(Sepal.Length, Sepal.Width, data=iris) +
markvline(5) +
markvline(6)
列表是不錯的選擇,但你並不需要獨立添加元素,只是'qplot(Sepal.Length,萼片。寬度,數據=虹膜)+ markvline(5)+ markvline(6)' – HubertL
謝謝!這個告訴我的事情之一(以及我的例子中返回的一些錯誤代碼)是我可以按照評估返回單個函數(列表爲你),但是我不能*將它們與'+ '在我的功能裏面。這暗示'geom_vline()'和'geom_text()'不會與'+'單獨相互結合,但需要摺疊到'qplot()'返回的任何對象中。這是一個很好的領導! – mpettis
謝謝。這比我想象的要容易。我將編輯我的答案 –