超棒教程:如何用ggplot2繪製漂亮的統計圖形

2021-02-14 R語言統計與繪圖

ggplot2是由Hadley Wickham開發的一個功能十分強大的R語言繪圖程序包,它能夠非常輕鬆的畫出各種好看的統計圖形。

關於ggplot2的教程有很多,Cédric Scherer博士的這篇blog[1]是我目前為止看到過的最棒的ggplot2教學,講得非常全面且詳細。因此,在自己學習的同時希望將它分享給更多相關專業的同學。

blog主頁

本文翻譯整理了Cédric Scherer的這篇blog,為了讓它更加容易理解,也參考了其它相關的資料,對部分內容進行了補充和改寫。此外,這項工作也得到了Cédric Scherer博士本人的授權以及支持。

由於整篇教學十分全面且詳細,故篇幅也較大,因此將其整理為以下內容,並將在隨後分期推送,希望感興趣的同學可以持續關注,也可加入我們共同交流,分享你的寶貴經驗。

第一期:ggplot2基礎(一)—— A default ggplot, axes, titles
第二期:ggplot2基礎(二)—— Legends, backgrounds & grid lines, margins
第三期:ggplot2基礎(三)—— Colors, themes
第四期:ggplot2基礎(四)—— lines, text
第五期:ggplot2基礎(五)—— Multi-Panel plots, Chart types
第六期:ggplot2基礎(六)—— Coordinates, ribbons, smoothings
第七期:ggplot2之交互圖(Interactive Plots)

今天主要介紹第一期

目  錄

本期內容將會介紹 ggplot2 繪圖語法的基礎,以及如何調整圖形坐標軸的內容和外觀、修改圖形標題等內容。

ggplot2是一個基於圖形語法(The Grammar of Graphics)的繪圖系統。簡單來說,你只需要提供數據(data),並告訴ggplot2如何將變量映射到美學(aesthetics),使用什麼圖形元素(geoms),然後它將會處理剩餘的細節。

什麼是圖形語法?

Wilkinson創建了圖形語法來描述所有統計圖形背後的基本特性。圖形語法是對「什麼是統計圖形」這個問題的回答。ggplot2建立在Wilkinson語法的基礎上,它關注於圖層(layer)的優先地位,並對其進行調整,以便在R中使用。

簡而言之,圖形語法告訴我們圖形將數據映射到幾何對象(點、線、條)的美學屬性(顏色、形狀、大小)。

圖形還可以包括關於繪圖坐標系統的數據和信息的統計變換分面(facet)可用於繪製數據的不同子集。這些獨立組件的組合構成了完整的圖形。

所有的圖形都是由數據(data)、你想要可視化的信息和一個映射(map,如何將數據變量映射到美學屬性的描述)組成的。

有五個映射組件:

1)圖層:幾何元素和統計變換的集合。幾何元素(geoms)代表了你在圖中所看到的東西:如點、線、多邊形等等;統計轉換(stats)對數據進行總結:例如,對觀察數據進行分類和計數以創建直方圖,或擬合線性模型等。2)尺度(Scale):將數據空間中的值映射到美學空間中的值。這包括顏色、形狀和大小的使用。尺度還會繪製圖例和坐標軸,這使得從圖中讀取原始數據的值成為可能(反向映射);3)坐標系統:描述數據坐標如何映射到圖形的平面上。它還提供軸線(axes)和網格線(gridlines)來幫助閱讀圖表。我們通常使用笛卡爾坐標系,但也有其他一些方法,包括極坐標和地圖投影。4)分面:指定如何分解數據子集並將其顯示為小的圖形5)主題:控制更精細的顯示點,如字體大小和背景顏色。雖然ggplot2謹慎地選擇了默認值,但你可能需要參考其他參考資料來創建有吸引力的圖。

由於本文涉及大量的統計圖形元素,在正式進入教程之前,希望明確這些元素的名稱,以免引起混亂。

下面展示了一個常見的統計圖形(直方圖)的基本結構和常見的元素:

個人翻譯 僅供參考

以及常見的統計圖形名稱:

1. 繪圖前準備工作1.1 需要安裝的R包tidyverse:同樣出自Hadley Wickham大神之手,包含了ggplot2,dplyr,tidyr,readr,purrr,tibble,stringr, forcats等多個包:

以下為blog教程中的R包安裝代碼,自己根據需要安裝。

## 安裝CRAN上的R包
install.packages(c("tidyverse", "colorspace", "corrr",  "cowplot", 
                   "ggdark", "ggforce", "ggrepel", "ggridges", "ggsci", 
                   "ggtext", "ggthemes", "grid", "gridExtra", "patchwork",
                   "rcartocolor", "scico", "showtext", "shiny", 
                   "plotly", "highcharter", "echarts4r"))
## 安裝github上的R包
devtools::install_github("JohnCoene/charter")

1.2 加載數據集

本文使用的數據來自National Morbidity and Mortality Air Pollution Study(全國空氣汙染髮病率和死亡率研究,NMMAPS[2]),選取了Chicago市1997-2000年的數據。

# 文件置於工作目錄下
chic <- readr::read_csv("chicago-nmmaps.csv")

數據集Excel文件至文末獲取

首先加載ggplot2包或tidyverse包,後者包含了ggplot2等多個包。

# library(ggplot2)
library(tidyverse)

2. 從一個默認的ggplot開始

ggplot2的語法與R的基礎繪圖語法不同,根據基本元素,一個默認的ggplot圖需要指定以下內容:數據,美學和幾何圖形

2.1 定義一個繪圖對象

ggplot2繪圖的第一步就是要指定繪圖所需要的數據以及坐標軸對應的變量:

g <- ggplot(chic, aes(x = date, y = temp))

ggplot(data = df):告訴ggplot2我們將要處理的數據,本例中為chic,此處省略了data=;

aes(x = var1, y = var2):大多數情況下,你可能需要繪製兩個變量,一個在x軸上,另一個在 y軸上。這些屬於位置美學,這裡,我們將變量date映射到x軸,變量temp映射到y軸。之後也將會映射其他變量到各種各樣的美學屬性,如顏色大小形狀

ggplot2允許你將當前的ggobject(繪圖對象)存儲為變量,在本示例中稱為g。你可以稍後通過添加其他圖層來擴展這個ggobject:可以是一次添加所有圖層,也可以將它賦值給相同的或另一個變量。

Tips:賦值給一個變量的同時顯示該變量的方法就是將整行代碼用()括起來

如果運行上述代碼,只會創建下面的面板:

為什麼?

這是因為ggplot2不知道我們希望如何繪製該數據——我們仍然需要提供一個幾何圖形!

2.2 根據數據添加幾何對象

有許多不同的幾何圖形(通常都是以geom_開頭),你可以向ggplot添加一些默認的幾何對象(如散點、線條、直方等等),也可以添加一些擴展包提供的更多幾何對象。

例如,通過添加geom_point()來創建一個散點圖:

g + geom_point()

這個數據也可以使用線圖 line plot 來展示:

g + geom_line()

你也可以將多種幾何圖形組合起來,這是一個神奇而有趣的開始:

g + geom_line() + geom_point()

2.3 更改幾何圖形的屬性

在 geom_* 命令中,你可以操縱一些美學屬性,如顏色、形狀和大小:

g + geom_point(color = "firebrick", # 設置散點顏色
               shape = "diamond",  # 設置散點形狀
               size = 2) # 設置散點大小

Tips:ggplot2能夠理解color和colour,以及簡寫的col。

你也可以使用R預設顏色[3]或者十六進位顏色,甚至也可以使用 RGB() 函數添加 RGB/RGBA 顏色。

RGB或RGBA顏色:

RGB是三原色(Red Green Blue)的簡稱,多出來的 A 表示透明度。

例如rgb(255, 0, 0) 中的數字表示 3 原色的程度,取值範圍是 0-255,都是 0 就是沒有顏色,沒有色彩就是一片黑暗,也就是黑色。對應的全為 255 則為白色,不同程度的搭配可以得到以萬為單位的顏色種類。

十六進位顏色:

三原色每一種顏色強度最低為 0,最高為 255,通常都以 16 進位數值表示,那麼 255 對應於十六進位就是 FF,並把三個數值依次並列起來 ,以#開頭。

例如,顏色值#FF0000為紅色,因為紅色的值達到了最高值 FF(即十進位的255),其餘兩種顏色強度為 0。在例如「 #FFFF00 」表示黃色,因為當紅色和綠色都為最大值,且藍色為 0 時,產生的就是黃色。

常用顏色的十六進位和 rgb 格式[4]

g + geom_point(color = "#b22222", 
               shape = "diamond", 
               size = 2)

g + geom_point(color = rgb(178, 34, 34, maxColorValue = 255), 
               shape = "diamond", 
               size = 2)

每個 geom 對象自帶其屬性(叫做參數),同樣的參數可能產生不同的變化,這依賴於你使用的 geom 對象,比如下面的例子:

g + geom_point(color = "firebrick", 
               shape = "diamond", 
               size = 2) +
    geom_line(color = "firebrick", # 設置線條顏色
              linetype = "dotted",  # 設置線型
              size = .3) # 設置線的大小

2.4 改變默認的 ggplot2 主題

為了展示ggplot的「多才多藝」,讓我們通過設置一個不同的內置主題來擺脫ggplot2灰色的默認外觀,例如theme_bw()——通過調用theme_set(),所有後面的plot將擁有相同的黑白主題。紅點現在看起來好看多了!

theme_set(theme_bw())
g + geom_point(color = "firebrick")

如果需要設置回默認主題,運行下面代碼即可。

theme_set(theme_grey()) # 設置灰色主題

更多關於如何使用內置主題以及如何自定義主題的信息將會在主題部分詳細敘述。

3. Working with axes (坐標軸)3.1 修改坐標軸標題

坐標軸標題的修改使用labs()函數,這裡我們分別為 x 軸和 y 軸提供了一個字符串作為標題:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") + # 設置散點顏色
  labs(x = "Year",  # 設置x軸標籤
       y = "Temperature (°F)") # 設置y軸標籤

也可以使用xlab()和ylab()實現同樣的操作:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") + # 設置散點顏色
  xlab("Year") + # 設置x軸標籤
  ylab("Temperature (°F)") # 設置y軸標籤

對於此處標題中的溫度符號 ℉ ,你可以簡單地通過添加符號本身 「 ℉ 」 來完成。

也可以採用另一種複雜一點的方法,即使用 expression() 函數建立表達式,這在添加一些數學公式或複雜符號(如上下標)時非常有用。

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", 
       y = expression(paste("Temperature (", degree ~ F, ")"^"(Hey, why should we use metric units?!)")))

3.2 增加坐標軸與坐標軸標題之間的空間

theme()函數是修改特定主題元素(文本、標題、符號、背景等)的基本命令,我們將會大量使用它!

現在來修改文本元素:
可以在theme()調用中 element_text()來改變所有或特定文本元素的屬性,這裡是坐標軸標題:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", # 設置x軸標籤
       y = "Temperature (°F)") + # 設置y軸標籤
  theme(axis.title.x = element_text(vjust = 0, size = 15),
        axis.title.y = element_text(vjust = 2, size = 15))

size 調整字號大小;
vjust 指的是垂直對齊,它的範圍通常在 0 到 1 之間,但你也可以指定該範圍之外的值。

注意,即使我們水平移動 y 軸上的軸標題,我們也需要指定 vjust(從標籤的角度來看這是正確的)。

你也可以通過指定兩個文本元素的邊距來改變距離:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.title.x = element_text(margin = margin(t = 10), size = 15),
        axis.title.y = element_text(margin = margin(r = 10), size = 15))

margin 中的t(top)和r(right)用於調整 x 軸和 y 軸標題的位置,你也可以定義 margin(t, r, b, l) 來調整坐標軸標籤的位置;簡單來說,r 和 l 可以調整 Temperature (°F) 進行左右平移,而 t 和 b 可以調整 Year 上下平移。

3.3 改變坐標軸標題的美學屬性

這裡再次使用 theme() 函數來修改 axis.title 或者 axis.title.x、axis.title.y 元素。

對於坐標軸標題,可以在 element_text() 中可以修改默認的size、color 和 face(大小、顏色和字體):

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", 
       y = "Temperature (°F)") +
  theme(axis.title = element_text(size = 15, 
                                  color = "firebrick", 
                                  face = "italic"))

face 參數用來調整字體,如 bold 粗體,italic 斜體,以及 bold.italic 斜粗體(同時將x軸和y軸的標題文字調整為大小15,火磚色,斜體)。

axis.title 是對 x 軸和 y 軸的坐標軸標題同時進行修改,你也可以使用 axis.title.x 和 axis.title.y 分別對 x 軸和 y 軸標題進行修改:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.title.x = element_text(color = "sienna", size = 15),
        axis.title.y = element_text(color = "orangered", size = 15))

將x軸的標題文字修改為大小15,顏色為sienna黃土色, y軸的標題文字調整為大小15,橘色)

你也可以使用 axis.title 和 axis.title.y 的組合,因為 axis.title.x 將會繼承來自 axis.title 的值:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.title = element_text(color = "sienna", size = 15),
        axis.title.y = element_text(color = "orangered", size = 15))

實際上與上圖一致,但這裡首先是同時修改了x軸和y軸,然後又修改了y軸。

也可以在對兩個坐標軸標題修改一些屬性的同時為其中一個坐標軸標題單獨修改一些屬性:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.title = element_text(color = "sienna", size = 15, face = "bold"),
        axis.title.y = element_text(face = "bold.italic"))

首先是同時修改了 x 軸和 y 軸的標題為大小15,黃土色以及粗體,然後又將 y 軸的標題修改為斜粗體。

3.4 改變坐標軸文本(數字刻度)的美學屬性

類似地,我們使用 axis.text 或 axis.text.x 和 axis.text.y 來修改坐標軸刻度的外觀:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.text = element_text(color = "dodgerblue", size = 12),
        axis.text.x = element_text(face = "italic"))

3.5 旋轉坐標軸刻度文本

承接前面所述,theme 函數中的文本元素參數 angle 允許你旋轉坐標文本,使用 hjust 和vjust,你可以水平(0 =左,1 =右)和垂直(0 =上,1 =下)調整文本的位置:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.text.x = element_text(angle = 50, vjust = 1, hjust = 1, size = 12))

3.6 移除坐標軸標題以及文本刻度

我們可以使用 theme_blank() 來移除坐標軸標題,但更簡單的方法是使用 labs():

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = NULL, y = "")

Tips:NULL相當於完全移除了標題,類似於 element.blank(),而「 」將保留標題空間,但什麼也不顯示。

如果你不想讓坐標軸顯示刻度,也可以這樣進行刪除:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(axis.ticks.y = element_blank(),
        axis.text.y = element_blank())

上述代碼中的 axis.ticks.y 指 y 軸的刻度,而 axis.text.y 則是指 y 軸的刻度文本。

3.7 限制坐標軸範圍

有時候你需要更仔細地看某個範圍內的數據的圖像,可以這樣做:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  ylim(c(0, 50))

這樣只顯示了 Temperature(y軸)在 0 到 50 之間的數據,相當於放大顯示了部分數據。

也可以使用 scale_y_continuous(limits = c(0, 50)) 或 coord_cartesian(ylim = c(0, 50)) 。區別是:前者移除了所有不在範圍內的數據點,而後者只是像 ylim(0, 50)一樣調整了圖像的顯示範圍。

你或許會好奇兩者有什麼區別,讓我們比較下面兩幅圖:

你或許已經注意到左邊的圖在 y 軸限制範圍外的部分是空的,而右邊的圖在範圍之外的數據點仍然存在。

或許你會想:這樣的區別似乎無關緊要。繼續來看下面的箱形圖:

因為 scale_x|y_continuous() 首先截取了數據,而 coord_cartesian() 只是截取了圖像,範圍之外的數據仍然存在,導致我們對箱線圖的估計完全不同,而且是錯誤的,至少在這種情況下這不是你的目標!你細品。

3.8 強迫R繪製從原點開始繪圖
chic_high <- dplyr::filter(chic, temp > 25, o3 > 20) # 選取部分數據
ggplot(chic_high, aes(x = temp, y = o3)) +
  geom_point(color = "darkcyan") +
  labs(x = "Temperature higher than 25°F",
       y = "Ozone higher than 20 ppb") +
  expand_limits(x = 0, y = 0)

個人感覺這個功能有點雞肋,也就是當你的數據範圍比較大時,繪圖的起始點仍然從 0 開始。

使用 coord_cartesian(xlim = c(0, NA), ylim = c(0, NA)) 可以達到同樣的效果。

ggplot(chic_high, aes(x = temp, y = o3)) +
  geom_point(color = "darkcyan") +
  labs(x = "Temperature higher than 25°F",
       y = "Ozone higher than 20 ppb") +
  coord_cartesian(xlim = c(0, NA), ylim = c(0, NA))

或者像這樣:

ggplot(chic_high, aes(x = temp, y = o3)) +
  geom_point(color = "darkcyan") +
  labs(x = "Temperature higher than 25°F",
       y = "Ozone higher than 20 ppb") +
  expand_limits(x = 0, y = 0) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_cartesian(clip = "off")

注意與上圖的區別,原點的位置變了。

參數 clip = "off" 允許在面板區域之外繪製,也就是把圖層畫在畫布之外。關於這個問題的詳細描述參見這篇文章[5],此處調用它是為了確保 c(0,0) 處的刻度沒有被切掉。

3.9 相同比例的坐標軸

就是讓 x 軸和 y 軸的刻度比例保持一致。為了展示,讓我們畫出原始溫度與添加了一些隨機噪聲(在原有數值上添加隨機數)的溫度的散點圖。

coord_equal()是一個具有指定比率的坐標系統,默認值 ratio = 1 確保 x 軸上的一個單位與 y 軸上的一個單位具有相同的長度:

ggplot(chic, aes(x = temp, y = temp + rnorm(nrow(chic), sd = 20))) +
  geom_point(color = "sienna") +
  labs(x = "Temperature (°F)", y = "Temperature (°F) + random noise") +
  xlim(c(0, 100)) + ylim(c(0, 150)) +
  coord_fixed()

x 軸上的 0-50 與 y 軸的 0-50 長度是相同的,擁有相同的比例。

而 ratio 大於 1 時 y 軸上的單位比 x 軸上的單位長,反之則短。

ggplot(chic, aes(x = temp, y = temp + rnorm(nrow(chic), sd = 20))) +
  geom_point(color = "sienna") +
  labs(x = "Temperature (°F)", y = "Temperature (°F) + random noise") +
  xlim(c(0, 100)) + ylim(c(0, 150)) +
  coord_fixed(ratio = 1/5)

3.10 使用函數來改變標籤

有時修改一下(刻度)標籤是很方便的,可以添加單位或百分比符號而不將它們添加到數據中。在這種情況下,你可以使用函數來完成:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = NULL) +
  scale_y_continuous(label = function(x) {return(paste(x, "Degrees Fahrenheit"))})

就是把原有的刻度與表示單位的字符串「粘貼」在了一起。

4. Working with titles (標題)4.1 添加一個圖形標題

使用 ggtitle() 函數來可以為圖形添加一個標題:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  ggtitle("Temperatures in Chicago")

或者你也可以使用 labs() 你可以添加一些參數,如補充的副標題、標籤tag、備註caption:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)",
       title = "Temperatures in Chicago",
       subtitle = "Seasonal pattern of daily temperatures from 1997 to 2001",
       caption = "Data: NMMAPS",
       tag = "Fig. 1")

4.2 標題加粗並在基線處添加空格

因為圖標題屬於主題元素,所以我們使用 theme() 函數和文本元素 axis.title 和 axis.text 來修改字體和邊距。

以下所有主題元素的修改不僅適用於標題,也適用於所有其他標籤,如plot.subtitle, plot.caption, plot.caption, legend.title, legend.text, axis.title 和 axis.text

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)",
       title = "Temperatures in Chicago") +
  theme(plot.title = element_text(face = "bold",
                                  margin = margin(10, 0, 10, 0),
                                  size = 14))

margin 函數中的四個參數依次為 t (top),r (right),b (bottom) 和 l (left),可以這樣來記:「t-r-oub-l-e」。

4.3 調整標題位置

一般對齊(左、中、右)由 hjust (表示水平調整)來控制,當然也可以調整垂直對齊,使用vjust來控制。

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = NULL,
       title = "Temperatures in Chicago",
       caption = "Data: NMMAPS") +
  theme(plot.title = element_text(hjust = 1, size = 16, face = "bold.italic"))

也可以根據面板區域通過 plot.title.position 和 plot.caption.position 指定標題、副標題和 caption 的對齊方式。

在大多數情況下,後者在設計上確實是更好的選擇,許多人都很喜歡這個新功能,特別是在 y 軸標籤很長的情況下,對齊看起來很糟糕:

g <- ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  scale_y_continuous(label = function(x) {return(paste(x, "Degrees Fahrenheit"))}) +
  labs(x = "Year", y = NULL,
       title = "Temperatures in Chicago between 1997 and 2001 in Degrees Fahrenheit",
       caption = "Data: NMMAPS") +
  theme(plot.title = element_text(size = 14, face = "bold.italic"),
        plot.caption = element_text(hjust = 0))

下面來調整對齊方式:

g + theme(plot.title.position = "plot",
          plot.caption.position = "plot")

調整之後標題是與y軸標籤對齊,而不是與y軸對齊,這樣看起來好多了。

4.4 在標題中使用非傳統字體

除了 ggplot 的默認字體外,你可以使用不同的字體。有幾個軟體包可以幫助你使用安裝在你電腦上的字體(如office程序中的字體)。

這裡,我使用了showtext包,它可以方便地在R圖中使用各種類型的字體(TrueType、OpenType、Type 1、web 字體等)。

在我們加載軟體包之後,你需要導入字體,這些必須安裝在你的設備上。例如使用 Google 字體,可以通過函數font_add_google()導入,但你也可以用 font_add() 添加其他字體。

Tips:在使用 Google 字體的情況下,您必須安裝該字體並重啟 rstudio 才能使用該字體.

library(showtext)
font_add_google("Playfair Display", ## name of Google font
                "Playfair")  ## name that will be used in R
font_add_google("Bangers", "Bangers")

現在,我們可以使用這些字體:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)",
       title = "Temperatures in Chicago",
       subtitle = "Daily temperatures in °F from 1997 to 2001") +
  theme(plot.title = element_text(family = "Bangers", hjust = .5, size = 25),
        plot.subtitle = element_text(family = "Playfair", hjust = .5, size = 15))

你也可以為所有的文本元素設置非默認字體,下面將 Roboto Condensed 字體設置作為所有圖形的默認字體:

font_add_google("Roboto Condensed", "Roboto Condensed")
theme_set(theme_bw(base_size = 12, base_family = "Roboto Condensed"))

4.5 改變多行文本之間的空間(間距)

當標題有多行文本的時候,使用 lineheight 參數可以改變行距:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "Year", y = "Temperature (°F)") +
  ggtitle("Temperatures in Chicago\nfrom 1997 to 2001") +
  theme(plot.title = element_text(lineheight = .8, size = 16))

本期完整代碼及示例數據下載:
https://osf.io/3kbw5/

最後,我們誠摯地邀請對ggplot2或R語言繪圖感興趣的同學可以加入我們,共同完成後續內容的整理。如有意向,可以聯繫統計聯盟小助手微信:Hpa201904或者郵箱uunotebook@163.com。

作者:郭治辰,江西師範大學心理統計與測量專業碩士在讀,研究領域為項目反應理論,認知診斷,計算機化自適應測驗,智能測評

本文轉載自公眾號荷蘭心理統計聯盟,如需轉載請獲取原作者授權。

參考資料[1]

blog網址: https://www.cedricscherer.com/2019/08/05/a-ggplot2-tutorial-for-beautiful-plotting-in-r/

[2]

數據集百度雲連結: https://pan.baidu.com/s/1L9YpsuyaiIIeaWcXwybP4w提取碼:aaaa

[3]

R預設顏色: http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

[4]

常用顏色的十六進位和 rgb 格式: https://blog.csdn.net/qq_37959401/article/details/79615979?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

[5]

這篇文章: https://guangchuangyu.github.io/2018/05/ggplot2-clip/

相關焦點

  • 基於ggplot2包繪製SCI學術箱線圖的保姆級教程
    2. 繪製基本箱線圖使用ggplot2包繪製箱線圖很簡單,主要使用geom_boxplot()函數,先採用默認的參數繪製。install.packages("ggplot2")library(ggplot2)plot_pir <- ggplot(data = box_data,aes(x = Type, y = AOD_550nm))+  geom_boxplot(aes(fill=Type))+  labs(caption
  • 手把手教你使用ggplot2繪製折線圖
    一、繪製單條折線圖有關時間序列的折線圖library(ggplot2)library(lubridate) #處理日期時間相關的R包,非常有用,強烈推薦Year <- year(seq(from = as.Date('
  • ggplot2|從0開始繪製折線圖
    其中折線圖可以反映某種現象的趨勢,本文利用R語言的ggplot2包,從頭帶您繪製各式各樣的線形圖。B 10.103 C 30.001.1  繪製基本的折線圖ggplot(data=df, aes(x=dose, y=len, group=1)) +geom_line()1.2 添加點,並更改線型 和顏色ggplot(data=df, aes(x=
  • 基於ggplot2包繪製SCI學術散點圖,又是保姆級教程
    本期推文,我們使用ggplot2包繪製學術擬合散點圖。1. 加載數據數據在後臺回復散點圖即可獲取。繪製簡單圖形我們首先使用ggplot2的基本設置對數據進行散點繪製,這裡散點形狀 shape=15 為黑色方塊。
  • 如何用R繪製精美的散點圖
    R可以繪製出很棒的統計圖形,之前我們介紹了用R繪製柱狀圖。今天,小編帶著小夥伴們一起來了解下散點圖的繪製。小編自己看代碼的時候也覺得枯燥乏味,看圖片比看代碼輕鬆多了。所以我們先上圖。上圖就是通過R繪製出的散點圖,看起來也很漂亮。那麼,這種散點圖是如何繪製的呢?感興趣的小夥伴就請繼續看下面的代碼。
  • 手把手教你使用ggplot2繪製中國地圖
    自從用了ggplot2包,越來越覺得其博大精深,通過圖層的概念可以繪製豐富的可視化圖形,如常見的散點圖、直方圖、條形圖、折線圖等。今天就教大家如何使用ggplot2實現地圖的繪製,以及如何在地圖中加入氣泡圖和條形圖。本文所使用的數據來自於經管之家moonstone作者提供的流行病學樣本數據。有關地理信息數據可至文後的下載連結。
  • 【R畫圖】手把手教你使用ggplot2繪製折線圖
    一、繪製單條折線圖library(ggplot2)#有關時間序列的折線圖library(lubridate) #處理日期時間相關的R包,非常有用,強烈推薦Year <- year(seq(from = as.Date('2006-01-01'), to = as.Date('2015-01-01'), by = 'year'))Weight <- c
  • 手把手教你使用ggplot2繪製散點圖
    繪製簡單的散點圖ggplot包中的geom_point()函數可以非常方便繪製出所需的散點圖。以上幾種圖形是將離散變量或因子映射給顏色屬性或形狀屬性,下面介紹如何將連續變量映射給顏色屬性或大小屬性。上文中提到,通過繪製兩個變量的散點圖可以查看變量將的關係,可以是線性的也可以是非線性的,如何在散點圖的基礎上再添加擬合曲線呢?下文將逐一介紹幾種擬合線。
  • ggplot2包的繪圖邏輯簡介
    在R語言裡,談及繪圖,ggplot2是最出名的繪圖包之一,作為一個繪圖神器,它提供了許許多多的功能給用戶使用,僅用短短幾行代碼,一幅幅高端大氣的圖像便躍然紙上,這可能就是ggplot2包的魅力所在。我們用相同的數據,通過plot函數跟ggplot函數分別繪製散點圖來簡單理解一下兩者的差異:library("ggplot2")    #加載安裝好的ggplot2包plot(iris$Sepal.Length, iris$Sepal.Width) #plot繪圖ggplot(data = iris,aes(x = Sepal.Length
  • ggplot2|繪製GO富集柱形圖
    本文利用R語言的ggplot2包,從頭帶您繪製可發表級別的GO富集分析結果圖。利用各種生信工具得到富集分析結果,數據列可能不一致,但關鍵幾列都有。library(ggplot2)data <- read.csv("GO_enrichment_significant.csv",header=TRUE)head(data)參照之前ggplot2使用方法,更改geom即可繪製簡單的bar圖,按照
  • ggplot2|詳解八大基本繪圖要素
    此外, 圖形中還可能包含數據的統計變換(statistical transformation, 縮寫為stats), 最後繪製在某個特定的坐標系(coordinate system,  縮寫為coord)中, 而分面(facet, 指將繪圖窗口劃分為若干個子窗口)則可以用來生成數據中不同子集的圖形。"
  • R語言繪圖之ggplot2
    那麼今天我們就為大家介紹一下目前在R語言中流行的繪圖包ggplot2。1. ggplot2的安裝:install.packages("ggplot2")。2. ggplot2的繪圖原理: ggplot2的核心理念是將繪圖與數據分離,數據相關的繪圖與數據無關的繪圖分離,並按圖層作圖。
  • 高階可視化繪圖系統:ggplot2入門
    更加深入學習ggplot2,請參考《ggplot2: 數據分析與圖形藝術》。目 錄引言:ggplot2基本要素1.統計變換(statistics):統計變換(stat)是對數據進行的某種匯總。例如將數據分組計數以創建直方圖,或將一個二維的關係用線性模型進行解釋。統計變換是可選的,但通常非常有用。標度(Scale):標度(scale)的作用是將數據的取值映射到圖形空間,例如用顏色、大小或形狀來表示不同的取值。
  • R與生物專題 |第十二講 R作圖-ggplot2繪製箱式圖
    在「R作圖」專輯中,我們將向大家介紹常見圖形的R作圖方法以及對應代碼解釋,幫助大家輕鬆理解和學習R作圖技巧。
  • R筆記3:ggplot繪製商務圖表--雜誌級商業圖表
    的兩本書時會很困惑,一是書中的例子都是使用系統自帶的數據集,初學者不知道如何換成自己的數據;二是那些數據集都是長數據,而初學者的數據可能都是寬數據,那些代碼無法用。這就是ggplot繪製圖表的默認樣式,網絡上的各種教程也只介紹到這裡為止。這個樣式非常平實樸素,看起來很舒服很耐看,它是根據塔夫特等專家的理論設計的,適合科研、論文、統計之類的運用場景,但並不太適合商務環境。
  • 實用教程!R語言 ggplot2 繪圖入門,看完你就理解ggplot2的繪圖邏輯了
    ggplot2包是R的一個作圖用的最精彩的擴展包,它實現了「圖形的語法」,將一個作圖任務分解為若干個子任務,只要完成各個子任務就可以完成作圖。在作常用的圖形時,只需要兩個步驟:首先將圖形所展現的數據輸入到ggplot()函數中,然後調用某個geom_xxx()函數,指定圖形類型,如散點圖、曲線圖、盒形圖等。
  • ggplot2繪製時間序列變化圖
    ggplot2繪製時間序列變化圖疫情時間序列變化涉及主要方法:list.files遍歷文件read_excel讀取EXCEL文件geom_point散點繪製library(lubridate)library(ggplot2)library(grid)library(
  • R ggplot2 實用系列----折線圖
    ggplot2 是繪製科研論文圖片的強有力工具,是很多其它包依賴的做圖包。
  • R語言 高階可視化繪圖系統:ggplot2入門 | 第8講
    更加深入學習ggplot2,請參考《ggplot2: 數據分析與圖形藝術》。目 錄引言:ggplot2基本要素1.統計變換(statistics):統計變換(stat)是對數據進行的某種匯總。例如將數據分組計數以創建直方圖,或將一個二維的關係用線性模型進行解釋。統計變換是可選的,但通常非常有用。標度(Scale):標度(scale)的作用是將數據的取值映射到圖形空間,例如用顏色、大小或形狀來表示不同的取值。
  • R筆記7:ggplot繪製商務圖表--地圖上的迷你柱形圖
    本例用ggplot來繪製商業圖表仿的第025號案例,地圖上的迷你柱形圖。