LHB阿好伯, 2020/03/22
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
R
ggplot2
ggplot2 是R中有名的數據可視化套件功能強大、靈活便捷
其語法靈感源自Leland Wilkison的《圖形的語法》一書 使用ggplot2 可以輕鬆實現
總結來說有以下幾點
在ggplot2函數大概可以分為三個部分:
細分可以分為
- 將數據中的變量映射到圖形屬性。映射控制了二者之間的關係
映射:aes()函數是ggplot2中的映射函數 所謂的映射即為數據集中的數據關聯到相應的圖形屬性過程中一種對應關係 圖形的顏色,形狀,分組等都可以通過通過數據集中的變量映射
以下以ggplot2內建資料集diamonds展示 diamonds中包含近54,000顆鑽石的價格和其他屬性的數據集 變量如下
price 美元價格($ 326~$ 18,823)
carat 鑽石的重量(0.2~5.01)
cut 切割的質量(Fair, Good, Very Good, Premium, Ideal)
color 鑽石顏色,從D(最佳)到J(最差)
clarity 鑽石淨度的度量(I1(最差),SI2,SI1,VS2,VS1,VVS2,VVS1,IF(最佳))
X 長度以毫米(0–10.74)
y 寬度(毫米)(0–58.9)
z 深度以毫米為單位(0–31.8)
carat | cut | color | clarity | depth | table | price | x | y | z |
---|---|---|---|---|---|---|---|---|---|
0.23 | Ideal | E | SI2 | 61.5 | 55 | 326 | 3.95 | 3.98 | 2.43 |
0.21 | Premium | E | SI1 | 59.8 | 61 | 326 | 3.89 | 3.84 | 2.31 |
0.23 | Good | E | VS1 | 56.9 | 65 | 327 | 4.05 | 4.07 | 2.31 |
0.29 | Premium | I | VS2 | 62.4 | 58 | 334 | 4.2 | 4.23 | 2.63 |
0.31 | Good | J | SI2 | 63.3 | 58 | 335 | 4.34 | 4.35 | 2.75 |
0.24 | Very Good | J | VVS2 | 62.8 | 57 | 336 | 3.94 | 3.96 | 2.48 |
稍微修改一下映射資料與添加的圖層就可以畫出盒鬚圖
在R語言中有幾個作為通道映射的參數 用於修改圖形參數
映射參數 | 屬性 | 補充 |
---|---|---|
colour/col | 修改點、線與填充區域輪廓顏色 | |
fill | 修改填充區域顏色 | |
alpha | 設定顏色透明度範圍0~1(不透明) | |
size | 設定點大小或是線的寬度 | |
angle | 控制文字的擺放角度 | |
vjust, hjust | 控制位置擺放,vjust為垂直位置,hjust為水平調整 | |
linetype | 線條類型 | http://sape.inf.usi.ch/quick-reference/ggplot2/linetype |
shape | 點形狀 | https://ggplot2.tidyverse.org/reference/scale_shape.html |
group | 資料分組處理 | |
family | 字體* | plain常規, bold粗體, italic斜體,bold.italic粗斜體 |
而添加一小段程式碼colour=clarity
在映射中就可以將鑽石淨度作為顏色依據將散佈圖上的點依照鑽石淨度不同更換為不同顏色
由此可以發現在越高價的鑽石中淨度越低其克拉數需要越高才能達到一樣的售價
若是將colour = clarity
修改成為colour = color
已可以看到類似的結果
顏色也可以自訂喜歡的配色
在ggplot2中也可以修改其點形狀作為分類的功能
只需要加上shape = cut
即可
上述在映射中會添加許多微調的資訊
但這些資訊也可放置於繪製圖層中
在觀看程式碼時會更好理解
經常在資料非常密集的情況下我們也會使用alpha = 0.2
來調整透明度可以讓圖片整體看起來更好
學習到這邊大家應該對於視覺通道映射的使用有一定的了解了
後續我就用幾個簡單的例子說明各視覺通道映射的使用
嘗試看看是否能理解程式碼的差別與作用
全文分享至
https://www.facebook.com/LHB0222/
有疑問想討論的都歡迎於下方留言
喜歡的幫我分享給所有的朋友 \o/
有所錯誤歡迎指教