ggplot2著色指南(1)

·

·

最近在做的分析很常需要利用自定義顏色來畫圖,每次都來問ChatGPT和Copilot到底怎麼寫,於是想說好好地來整理一下 R 語言的繪圖工具 ggplot2 中相關的函數和用法。

首先每次都沒搞楚就亂用的是 _color_ 系列的函數和 _fill_ 系列的函數(哈哈哈真的很亂來)。

  • 前者改變的是 "color" 屬性1 2,控制線條3、圓點4等的顏色。
  • 後者改變的是 "fill" 屬性,控制棒形圖等圖形內填充的顏色。
    • 棒形圖裡柱子的外框的話,也是線條,所以也可以通過改變 "color" 屬性來設定外框顏色。

"color" 屬性 vs "fill" 屬性

先來看看官方教學中的幾個例子,應該很快就能了解這兩個屬性如何控制圖形的外觀。

例子1:設定棒形圖柱子顏色

  • 由於目的是想改變柱子內填充的顏色,因此可以通過設定 "fill" 屬性來完成。
  • 屬性值可以使用如 "red" 等等內置的顏色,也可以直接輸入選好的HEX code。
  • 如果想把柱子變為透明,則可以把 "fill" 屬性設為 NA
  • 如果只想改變填充顏色的透明度,可以利用HEX code來設定("#RRGGBBAA"中的"AA"5

圖一

ggplot(mtcars, aes(x = factor(cyl))) + 
    geom_bar(fill = "#8B5CCC") +
    theme_classic() 

例子2:設定棒形圖外框顏色

  • 由於目的是想改變柱子外框的顏色,是線條的顏色,因此可以通過設定 "color" 屬性來完成。

圖二

ggplot(mtcars, aes(x = factor(cyl))) + 
    geom_bar(fill = 'white', color = "steelblue") +
    theme_classic()

例子3:分組設為不同顏色

  • 上述例子中已經把資料按 cyl 分別畫出棒形圖,如果想進一步按另一列 vs 的分組,再分別以不同顏色畫出,則可以在 aes 中進一步設定 "fill" 屬性。

圖三

ggplot(mtcars, aes(x = factor(cyl), 
                   fill = factor(vs))) + 
    geom_bar() +
    theme_classic()
  • 那麼,如果我們想把預設的紅色和藍色,改為自己選擇的顏色呢?
  • 這可以通過另一函數 scale_fill_manual() 中設定。這裡可以看到這個函數的名字中,有 _fill_ ,說明他改變的是圖像中的 "fill" 屬性。

圖三.變形一

ggplot(mtcars, aes(x = factor(cyl), 
                   fill = factor(vs))) + 
    geom_bar() +
    scale_fill_manual(values = c("#96bf69", "#9269bf")) +
    theme_classic()
  • 如果想把堆疊形棒形圖(stacked barplot)改成並列形棒形圖,那麼可以把 position 設定成 "dodge"

圖三.變形二 6

ggplot(mtcars, aes(x = factor(cyl), 
                   fill = factor(vs))) + 
    geom_bar(position = "dodge") +
    scale_fill_manual(values = c("#96bf69", "#9269bf")) +
    theme_classic()

例子4:散點圖

  • ggplot2 中,圓點可以被當成由線條組成,因此圓點的顏色是由 "color" 屬性所控制的。

圖四

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) + 
    geom_point() +
    theme_classic()
  • 所以如果把 aes 中的 "color" 改成了 "fill",那麼圓點都會以黑色顯示。

圖四.變形一

ggplot(mtcars, aes(x = wt, y = mpg, fill = factor(cyl))) + 
    geom_point() +
    theme_classic()

例子5:線圖

  • 線條顏色由 "color" 控制。

圖五

ggplot(economics, aes(x = date, y = unemploy)) +
    geom_line(color = "#C95D93") +
    theme_classic()

下篇文章再詳細來看 _color_ 系列和 _fill_ 系列的函數吧。

參考資料、延伸閱讀:

  1. ggplot2裡稱為「aesthetic」。 ↩︎
  2. 聽說在ggplot2中正式來說應該拼成colour,好像是因為作者是用英式英文的。 ↩︎
  3. geom_line() ↩︎
  4. geom_point() ↩︎
  5. 0%: "00"; 10%: "1A"; 25%: "40"; 50%: "7F"; 75%: "BF"; 100%: "FF" (資料來源) ↩︎
  6. 是不是覺得最右邊的柱子怪怪的?改成geom_bar(position = position_dodge(preserve = "single"))可以把柱子改成一樣寬度。 ↩︎

Leave a Reply

Discover more from BIOLOGIST J

Subscribe now to keep reading and get access to the full archive.

Continue reading