我正在學習 R 和 ggplot2,但真正讓我感到困惑的一件事是 aes 函式可用的引數。
精通Python、Java等編程語言。在這樣的編程語言中,你定義了一個函式,它的引數也是預定義的,你期望一個函式可以接受很多引數。
但是 aes 函式的使用在這里似乎非常不同,除了它的 'x' 和 'y' 引數。例如:
ggplot(forestarea, aes(income)) geom_bar(aes(fill=region)) labs(x="Regions", y="Number of countries",
title="Number of countries by income level from each region in the world",
caption="The WDI Forest Area Indicator")
在上面的代碼中,在第二個 aes 函式中,'fill' 引數似乎與 'geom_bar' 函式相關聯。它實際上是geom_bar的引數嗎?
然后:
ggplot(forestarea, aes(factor(1), fill= income)) geom_bar() coord_polar(theta="y") theme(axis.line = element_blank(), panel.background = element_blank()) theme(axis.text = element_blank()) theme(axis.ticks = element_blank()) labs(x=NULL, y=NULL, fill="Income level",
title="Proportion of countries by income level",
caption="WDI Forest Area Indicator")
這段代碼創建了一個餅圖,但您可以看到 'fill' 引數位于 geom_bar 函式之外的 aes 函式內,我很困惑。它是aes的引數嗎?
然后:
ggplot(land_and_agrpc, aes(area = AG.LND.FRST.K2, fill = AG.LND.AGRI.ZS, label=country))
geom_treemap() geom_treemap_text()
labs(title="Countries by land area",
fill="% of agriculture land",
caption="WDI country land area and forest land percentage datasets")
此代碼用于創建樹狀圖,您可以看到 aes 函式采用“area”引數,這在樹狀圖的檔案中進行了解釋:https : //cran.r-project.org/web/packages/treemapify/小插圖/介紹到treemapify.html。我更糊涂了。
那么,我如何解釋 aes 函式的引數,我在哪里使用它們(在 'ggplot' 或 'geom_XXX' 函式中)?
uj5u.com熱心網友回復:
考慮下面的代碼塊:
library(ggplot2)
df <- data.frame(
x = c(1, 2), y = c(2, 1)
)
ggplot(df, aes(x, y 1))
geom_point(colour = "green")
geom_line(aes(colour = "blue"))
在此,aes(x, y 1)裝置aes(x = x, y = y 1),其設定x和y美學,一些層理解到x和y所述資料幀的列。這是因為aes()有三個引數x,y和...。x = x例如,通過不宣告,第一個變數通過函式呼叫中的位置x與x引數匹配。除了x或y必須命名的其他引數,例如aes(size = 10)并通過槽...傳遞成為映射的一部分(它們是名稱-運算式對)。
因為y = y 1使用 in 中的“非標準評估”來評估運算式aes(),范圍規則發生變化,并且變數y將首先嘗試在資料列的背景關系中而不是在全域環境中進行評估,因此我們可以“計算” 1on資料框列。
aes()決定什么是有效argument = value映射的不是函式,而是接受或拒絕引數的層。你可以找到一個層該層的檔案中接受的引數,例如?geom_point,你看到它的理解x,y, alpha,colour,fill,group,shape,size和stroke。如果您致電 ,您應該能夠找到這些your_geom_layer$geom$aesthetics()。擴展包可以用自己的美學定義自己的層,例如area{treemap}包中的。
此外,因為我們已經aes(x, y 1)在主ggplot()呼叫中定義,它將應用于該圖中的每個幾何體或統計層,在這種情況下是點和線。因此,我們不需要在每個圖層中重復相同的映射,但除非您inherit.aes = FALSE在圖層中設定,否則它會被繼承。
在點層我們定義colour = "green" 以外的aes()功能,所以它將被字面解釋(并遵循與通常的范圍規則標準評價)。人們也稱其為“靜態”映射,您只能在層中使用它,而不能在全域中使用它。相比之下,因為我們已經aes(colour = "blue")在線條圖層中定義了,所以"blue"將被解釋為一個分類變數,該變數參與具有自己的調色板(“動態”映射)的色階。如果您執行代碼,您將看到該線不是藍色,而是帶有圖例的鮭魚色,該圖例將分類值“藍色”映射到具有 1 色調色板的離散比例。因為"blue" 不是資料幀中的列,也不是全域環境中的變數,它將被解釋為長度為 1 的向量,該向量將被回收以適應資料幀中的行數。
通常,如果要將某物映射到某個比例(包括x和等位置比例y),請將其放入aes(). 如果你想有一個字面解釋,你把它放在aes()相關層的外面。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348078.html
