我是一個相當有經驗的ggplot2用戶,并教給大學生。但是,我只是遇到了一個使用以下語法的示例:
ggplot(mtcars) aes(cyl) geom_histogram()
aes這比指定insideggplot()或... 更適合添加層的邏輯,geom_但它似乎沒有在 ggplot2 幫助中的任何地方記錄。因此,我想知道是否有任何理由限制/不應該使用這種語法?(顯然,我看到它需要在 geom 中指定,如果它意味著在 geom 之間有所不同......)
uj5u.com熱心網友回復:
這接近于一個基于意見的問題,但我認為這是一個主題,因為它有助于澄清 ggplot 呼叫的語法和結構。
從某種意義上說,您已經自己回答了這個問題:
ggplot2 幫助中的任何地方似乎都沒有記錄它
這一點,以及在線教程、博客和 SO 答案中幾乎沒有示例是不使用這種方式的充分理由aes(或者至少不教人們以這種方式使用它)。這可能會導致新用戶感到困惑和沮喪。
這更適合添加層的邏輯
這是真的,但可能有點誤導。它實際上做的是指定默認的美學映射,后續層將從ggplot物件本身繼承。它應該與默認資料物件一起被視為基本圖的核心部分,因此“屬于”初始ggplot呼叫,而不是添加或分層到圖上的東西。如果您創建一個ggplot沒有資料和映射的默認物件,插槽仍然存在,但包含豁免而不是NULL:
p <- ggplot()
p$mapping
#> Aesthetic mapping:
#> <empty>
p$data
#> list()
#> attr(,"class")
#> [1] "waiver"
請注意,與比例和坐標物件不同,您可能會爭辯說同樣如此,資料和美學映射不能有默認值。
這是否意味著你永遠不應該使用這種語法?不,但對于精通 ggplot 的人來說,它應該被認為是一種高級技巧。我發現它最常見的用例是更改在擴展包中創建的 ggplots 的映射,例如ggsurvplotor ggraph,其中繪圖函式使用包裝器圍繞ggplot. 它還可以用于快速創建具有相同主題和色標的多個繪圖:
p <- ggplot(iris, aes(Sepal.Width, Sepal.Length))
geom_point(aes(color = Species))
theme_light()
library(patchwork)
p (p aes(Petal.Width, Petal.Length))

所以底線是你可以根據需要使用它,但最好避免將它教給初學者
uj5u.com熱心網友回復:
TL;博士
我看不出為什么不使用這種模式的任何強有力的理由,但是檔案中推薦了其他模式,沒有詳細說明。
做什么 aes()?
ggplot 有兩種美學:
- 默認值(通常在內部提供
ggplot()),以及 geom_*()特定美學
如果inherit.aes = TRUE設定在geoms內部,那么這兩種美學在最終的情節中結合在一起。如果未設定默認美學,則geom_*必須設定特定美學。
使用ggplot(df) aes(x, y)更改默認美學。
這記錄在?" .gg":
aes() 物件替換了默認美學。
有什么理由不使用它嗎?
我看不出有什么強有力的理由不這樣做。但是,在?ggplot它的檔案中指出:
呼叫 ggplot() 的常用方法有以下三種:
- ggplot(df, aes(x, y, 其他美學))
- ggplot(df)
- ggplot()
如果所有層都使用相同的資料和相同的美學集,則建議使用第一種方法。
據我所知,典型的用例 aes()是所有層都使用相同的美學。所以檔案推薦了通常的模式ggplot(df, aes(x, y, other aesthetics)),但我找不到詳細的原因。
此外:即使圖看起來相同,回傳的物件ggplot(df, aes()和ggplot(df) aes()也不相同,因此可能存在一些邊緣情況,其中一種模式會導致錯誤或不同的圖。
您可以看到此代碼的許多細微差別:
library(ggplot2)
a <- ggplot(mtcars, aes(hp, mpg)) geom_point()
b <- ggplot(mtcars) aes(hp, mpg) geom_point()
waldo::compare(a, b, x_arg = "a", y_arg = "b")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466734.html
上一篇:指定在x軸上首先標記哪個日期
