0
我想在同一調用中使用傳遞給另一個ggplot2
函數中的data
函數參數data
參數的數據幀的變量。引用在ggplot函數的'data'參數中傳遞的數據幀的變量
例如,在下面的例子中,我想指的是傳遞給data
參數數據框的變量x
在ggplot
在另一個函數scale_x_continuous
如:
library(ggplot2)
set.seed(2017)
samp <- sample(x = 20, size= 1000, replace = T)
ggplot(data = data.frame(x = samp), mapping = aes(x = x)) + geom_bar() +
scale_x_continuous(breaks = seq(min(x), max(x)))
而且我得到的錯誤:
Error in seq(min(x)) : object 'x' not found
我明白了。當然,我可以這樣做避免了問題:
df <- data.frame(x = samp)
ggplot(data = df, mapping = aes(x = x)) + geom_bar() +
scale_x_continuous(breaks = seq(min(df$x), max(df$x)))
但我不希望被迫定義調用ggplot外界物體df
。我希望能夠直接引用我在data
中傳遞的數據框中的變量。
非常感謝
那是根本不可能的。 ggplot不評估數據環境中'scale_x_continuous'的參數。另外,每個圖層都可以擁有自己的數據源,因此,當您達到規模時,不再清楚哪個數據環境是「正確」的。您可能需要設置一個輔助函數,該函數根據請求的列同時添加圖層和比例尺。 – MrFlick
感謝MrFlick提供的這種精確性,由於我主要使用獨特的數據源,因此我沒有看到您提到的缺點。您認爲可以強制'scale_x_continuous'在同一個環境中查找在ggplot調用? 通過創建幫助函數,您的意思是創建函數,如: 'helper < - function(df){ggplot(data = df,mapping = aes(x = x))+ scale_x_continuous(breaks = seq(min (df $ x),max(df $ x))) } 然後調用: 'helper(data.frame(x = samp))+ geom_bar()' ? –
'scale_x_continuous'將永遠不會評估它的參數,而不是它調用時的參數。它無法直接看到任何數據屬性或審美映射。如果你想做一些不同的事情(不是簡單的任務),你必須編寫自己的函數。 – MrFlick