2010-09-03 79 views
3
ggplot() + 
layer(
data = diamonds, mapping = aes(x = carat, y = price), 
geom = "point", stat = "identity" 
) 

在上面的例子中,我想知道是否可以通過索引爲「aes」函數指定參數。R ggplot:通過索引指定aes

我知道克拉和價格對應鑽石名稱陣列中的第1和第8個元素。你能解釋爲什麼以下不起作用嗎?

ggplot() + 
layer(
data = diamonds, mapping = aes(x = names(diamonds)[1], y = names(diamonds)[8]), 
geom = "point", stat = "identity" 
) 

謝謝,德里克

回答

5

第二個版本不起作用,因爲names(diamonds)[1]"carat"而不是carat。使用aes_string而不是aes這個工作。

ggplot(data = diamonds, mapping = aes_string(x = names(diamonds)[1], y = names(diamonds)[8]), stat = "identity")+ geom_point() 

編輯: 爲了解決這個問題有非法字符,你所要做的將它們用反引號(是這樣的話,你要使用他們的任何時間)名稱:

dd <- data.frame(1:10, rnorm(1:10)) 
names(dd) <- c("(PDH-TSV 4.0)(ET)(240)", "Y") 
nms <- paste("`", names(dd), "`", sep="") 
ggplot(dd, mapping=aes_string(x=nms[1], y=nms[2])) + geom_point() 
+0

而aes_string適用於數據框架中的單詞名稱,它似乎處理具有空格和標點符號的名稱。 (PDH-TSV 4.0)(東部夏令時)(240)「 解析錯誤(文本= x):意外的數值常量」(PDH-TSV 4.0) 4.0「 – defoo 2010-09-03 20:00:30

+0

@Derek:我編輯瞭解決你的問題的答案。 – Aniko 2010-09-04 18:30:18