我實際上找到答案是我的問題,但我想知道這是否是一個錯誤。ggplot2問geom_errorbar中不存在的審美
假設我有這樣的:
library(ggplot2)
library(dplyr)
first <-
mtcars %>%
group_by(vs) %>%
summarise(mean = mean(mpg),
lower_ci = mean(mpg) - 2 * sd(mpg),
upper_ci = mean(mpg) + 2 * sd(mpg))
我可以做一個分層的情節是這樣的:
ggplot(data = mtcars, aes(x = as.factor(vs))) +
geom_point(aes(y = mpg), alpha = 0.2) +
geom_point(data = first, aes(y = mean), colour = "red") +
geom_errorbar(data = first, aes(ymin = lower_ci, ymax = upper_ci))
大,沒問題。讓我們一步一步重新創建劇情。
graph <- ggplot()
graph <- graph + geom_point(alpha = 0.2)
graph <- graph %+% mtcars + aes(x = as.factor(vs), y = mpg)
graph <- graph + geom_point(data = first, aes(x = as.factor(vs), y = mean, colour = "red"))
在這一點上,我只需要覆蓋其需要的x
,ymin
和ymax
aes
thethics錯誤吧。但是,對象在對象的結構中具有預定義的y
。出於某種原因,如果我補充一點:
graph + geom_errorbar(data = first,
aes(x = as.factor(vs), ymin = lower_ci, ymax = upper_ci))
,我會認爲這是正確的方式,它拋出一個錯誤有關aes
正題的長度。當然,first
數據幀具有正確的長度,所以我認爲它應該通過全局選項中的頂點。
如果我補充一點:
graph + geom_errorbar(data = first,
aes(x = as.factor(vs), y = NULL, ymin = lower_ci, ymax = upper_ci))
它修復它,並預期拋出Warning: Ignoring unknown aesthetics: y
。
我會假設該對象的全局選項將認識到geom_errorbar
不需要y
aes
正題。
我在這裏錯過了什麼嗎?
在你的代碼和@ cimentadaj的代碼,你都在第二AES指定一個新的數據源()。所以geom_中的引用就是新的數據集。假設在兩個獨立的數據框中匹配變量名稱的先驗表示相同的變量看起來像問題的配方。我不認爲這是一個錯誤,默認不做這個假設。 – Elin
我不確定我看到你的觀點。我使用的數據與問題中的數據相似 - 兩個數據框的共享列名指示相同的變量。如果一個人在不同的數據框中有相同的變量(如OP似乎),我認爲使用相同的列名可能是一個好主意。 – Gregor
我認爲如果你想討論'ggplot2'中的設計決定,這不是你正在尋找的論壇。從軟件的角度來看,這個實現對我來說很有意義,因爲每個層都知道要查看哪些數據,但不需要擔心其他層正在查看哪些數據。點層不應該根據線層是否引用相同的數據框來改變行爲。 – Gregor