R語言可視化 ggplot2—設定、映射、分組、匹配圖形屬性和圖形對象

設定和映射

除了可以將一個圖形屬性映射到一個變量,你也可以在圖層的參數裏將其設定爲一個單一值(例如,colour="red")。圖形屬性可以根據觀測的不同而變化,但是參數則不行。下面的例子用圖層裏的colour參數設定了點的顏色:

p <- ggplot(mtcars, aes(mpg, wt))
p + geom_point(colour = "darkblue")

在這裏插入圖片描述

注意這裏將顏色映射到’darkblue’與上面將顏色設定給’darkblue’的區別

p + geom_point(aes(colour = "darkblue"))

在這裏插入圖片描述

將顏色設定爲'darkblue'(上)與將顏色映射到'darkblue'(下)的區別。

當顏色映射到'darkblue'時,'darkblue'將被看作一個普通的字符串,使用默認的顏色標度進行標度轉換,結果得到了粉紅色的點和圖例。

分組

多個分組與單個圖形屬性

很多時候,我們都想將數據分成若干組,並用相同的方式對每個組進行渲染。當從總體上來查看數據時,我們通常希望區分每個個體而不是識別他們。這在含有多個個體的縱向數據中是很常見的,而這類圖形也常被稱爲“細面圖”。

下面的第一幅圖是一個時間序列圖,每條線代表一個男孩。通過這個圖你可以看到每個男孩的成長軌跡,但是不能識別哪個男孩是哪條軌跡。生成這個圖的代碼是:

data(Oxboys, package = "nlme")

ggplot(Oxboys, aes(age, height, group = Subject)) + geom_line()
#或
qplot(age, height, data = Oxboys, group = Subject, geom = "line")

在這裏插入圖片描述
正確分組時(分組變量group =Subject)每個個體的折線圖(上)。錯誤的分組時連接所有觀測點的折線圖(下)。此處省略了分組圖形屬性,效果等同於group = 1

qplot(age, height, data = Oxboys, geom = "line")

在這裏插入圖片描述

不同圖層上的不同分組

給Oxboys數據添加光滑曲線(smooth)

上圖用了和折線圖同樣的分組變量,得到了每個男孩的擬合直線。下圖在平滑層裏用了aes(group = 1),得到了所有男孩的擬合直線。

geom_smooth(aes(group = Subject), method = "lm", se = F)qplot(age, height, data = Oxboys, group = Subject, geom = "line") + geom_smooth(method = "lm", 
    se = F)

在這裏插入圖片描述

p + geom_smooth(aes(group = 1), method = "lm", size = 2, se = F)qplot(age, height, data = Oxboys, group = Subject, geom = "line") + geom_smooth(aes(group = 1), method = "lm", size = 2, se = F)

在這裏插入圖片描述

修改默認分組(group)

如果想用箱線圖來查看每個時期的身高分佈,默認的分組是正確的(上圖)。

如果想用geom_line()添加每個男孩的軌跡,就需要在新圖層裏設定 aes(group = Subject)(下圖)。

qplot(Occasion, height, data = Oxboys, geom = "boxplot")

在這裏插入圖片描述

qplot(Occasion, height, data = Oxboys, geom = "boxplot") + 
    geom_line(aes(group = Subject), 
    colour = "#3366FF")

在這裏插入圖片描述

boysbox <- ggplot(Oxboys, aes(Occasion, height)) + geom_boxplot()
boysbox + geom_line(aes(group = Subject), colour = "#3366FF")

匹配圖形屬性和圖形對象

羣組幾何對象另一重要議題是,如何將個體的圖形屬性映射給整體的圖形屬性。對於個體幾何對象而言這不是個問題,因爲每一條觀測都被一個單一的圖形元素所表示。然而,高密度數據將會使得區別單個的點變得困難(或者不可能),這也意味着如果單個點幾何對象變成一個羣組幾何對象,就變成了一大團點。

線條和路徑遵循差一原則:觀測點比線段數目多一,第一條線段將使用第一條觀測的圖形屬性,第二條線段將使用第二條觀測的圖形屬性,依次類推。這意味着最後一條觀測的圖形屬性將不會被用到,如下圖所示。路徑和線條的另一個限制是每個個體的線條類型必須是一個常數,因爲R不能繪製不同線條類型相連接的線條。

對於線條和路徑,線段的圖形屬性是由起始點的圖形屬性決定的。

如果顏色是離散的(上圖),在相鄰的顏色間插入其他顏色是沒有任何意義的。

如果顏色是連續的(下圖),可以在相鄰的顏色間進行插補,但默認條件下R不會這樣做。

df <- data.frame(x = 1:3, y = 1:3, colour = c(1, 3, 5))
qplot(x, y, data = df, colour = factor(colour), size = I(5)) + geom_line(aes(group = 1), 
    size = 2)

在這裏插入圖片描述

qplot(x, y, data = df, colour = colour, size = I(5)) + geom_line(size = 2)

在這裏插入圖片描述

用線性插值法做顏色漸變線條

xgrid <- with(df, seq(min(x), max(x), length = 50))
interp <- data.frame(x = xgrid, y = approx(df$x, df$y, xout = xgrid)$y, colour = approx(df$x, df$colour, xout = xgrid)$y)
qplot(x, y, data = df, colour = colour, size = I(5)) + geom_line(data = interp, size = 2)

在這裏插入圖片描述

fill構造疊加條形圖

對於其他的羣組幾何對象,如多邊形,只有當所有個體的圖形屬性都相同時,該圖形屬性纔會被使用,否則將使用默認值。這適用於fill參數,因爲它是整體對象的一個性質:考慮給多邊形邊界上的點填充不同的色沒有任何意義。
當圖形屬性映射到連續型變量時,這類問題經常會被涉及。因爲正如上所述,當映射對象是離散型的變量時,它將默認地把羣組幾何對象分解成更小的塊。這對條形圖和麪積圖的繪製非常有效,因爲將每小塊堆積起來就可得到和原來未分組前一樣形狀的圖形,如下圖所示。

一個條形圖(上)按組分解後得到的疊加條形圖(下),兩者輪廓相同。

qplot(color, data = diamonds)
qplot(color, data = diamonds, fill = cut)

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章