R語言有著很強大的畫圖功能。我們可以從下面的語句中得到
10年積累的成都網站設計、網站建設、外貿網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有港南免費網站建設讓你可以放心的選擇與我們合作。
1、繪畫函數
高級畫圖功能(創(chuàng)建一個新的圖形)
低級繪圖函數(在現有的圖形上添加元素)
2、繪圖參數介紹
高級繪圖函數共同參數選項:
其它常用繪圖參數(可以使用help(par)查看)
3、畫圖面板分割
在一個面板中畫多張圖
(1)、par中參數mfrow和mfcol
(2)、ayout函數
生成復雜的圖形排列
(3)、其它函數
在一個面板中畫多張圖
4.圖形保存
(1)輸出到屏幕
windows, X11
(2)輸出到文件
df , postscript , xfig, bitmap, pictex, cairo_pdf, svg, png, jpeg, bmp, tiff
通過菜單命令保存圖形
前面我給大家詳細介紹過
?GO簡介及GO富集結果解讀
?四種GO富集柱形圖、氣泡圖解讀
?GO富集分析四種風格展示結果—柱形圖,氣泡圖
?KEGG富集分析—柱形圖,氣泡圖,通路圖
? DAVID GO和KEGG富集分析及結果可視化
也用視頻給大家介紹過
? GO和KEGG富集分析視頻講解
最近有粉絲反映說,利用clusterProfiler這個包繪制GO富集分析氣泡圖和柱形圖的時候,發(fā)現GO條目的名字都重疊在一起了。
氣泡圖
柱形圖
這個圖別說美觀了,簡直不忍直視。經過我的認真研究,發(fā)現跟R版本有關。前面我給大家展示的基本都是R 3.6.3做出來的圖。很多粉絲可能用的都是最新版本的R 4.1.2。
我們知道R的版本在不停的更新,相應的R包也在不停的更新。我把繪制氣泡圖和柱形圖相關的函數拿出來認真的研究了一下,終于發(fā)現的癥結所在。
dotplot這個函數,多了個 label_format 參數
我們來看看這個參數究竟是干什么用的,看看參數說明
label_format :
a numeric value sets wrap length, alternatively a custom function to format axis labels. by default wraps names longer that 30 characters
原來這個參數默認值是30,當標簽的長度大于30個字符就會被折疊,用多行來展示。既然問題找到了,我們就來調節(jié)一下這個參數,把他設置成100,讓我們的標簽可以一行展示。
是不是還是原來的配方,還是熟悉的味道
同樣的柱形圖,我們也能讓他恢復原來的容貌。
關于如何使用R做GO和KEGG富集分析,可參考下文
GO和KEGG富集分析視頻講解
第一步:獲取要繪圖的整潔數據(涉及到數據整潔和操作的知識)
第二步:整潔數據做映射操作,確定x,y,color,size,shape,alpha等
第三步:選擇合適的幾何對象(根據畫圖的目的、變量的類型和個數)
第四步:坐標系和刻度配置
第五步:標簽信息和圖例信息
第六步:選擇合適的主題
ggplot2的語法包括10個部件。
數據(data)
映射(mapping)
幾何對象(geom)
標度(scale)
統計變換(stats)
坐標系(coord)
位置調整(Position adjustments)
分面(facet)
主題(theme)
輸出(output)
前3個是必須的,其它部件ggplot2會自動配置,也可以手動配置
ggplot2基本繪圖模板:
注意:
1)添加圖層的加號(+)只能放在行末尾
2)紅色方框里面mapping是全局域,綠色方框里面mapping是局部域,執(zhí)行先后順序,先局部域,后全局域
ggplot2畫圖必要部件-數據,映射和幾何對象
2.1 數據
數據(Data)用于畫圖的整潔數據
library(tidyverse
ggplot()先只提供數據,創(chuàng)建一個空圖形。
# ggplot()先提供整潔數據,生成一個空圖形
2映射
映射,把數據變量集與圖形屬性庫建立關聯。
最常用的映射有:
x:x軸
y:y軸
color:顏色
size:大小
shape:形狀
fill:填充
alpha:透明度
以mpg數據集為例,把變量displ和hwy分別映射到x和y,變量drv映射到color,此時圖形就有了坐標軸和網格線,color需要在有了幾何對象后才能體現出來。
# 映射操作
ggplot(data = mpg, mapping = aes(x = displ,
y = hwy, color = drv))
2.3 幾何對象
幾何對象是表達數據的視覺對象
不同類型的幾何對象是從不同的角度表達數據。
pgglot2提供了50多種“幾何對象”,均以geom_xxxx()的方式命名,常用的有:
幾何對象很簡單,只需要添加圖層即可。
例如,以mpg數據集為例,畫散點圖。
ggplot(data = mpg, mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point()層依次疊加,在上圖的基礎上,再添加一個幾何對象:光滑曲線。
#繼續(xù)增加一個幾何對象:光滑曲線
# 寫法1
ggplot(data = mpg, mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(se=FALSE)
# 寫法2
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(aes(color = drv)) +
geom_smooth(se=FALSE)
思考題:
1)寫法1和寫法2的差異?(全局域和局部域的使用差異)
2)寫法2若是要實現寫法1的功能,怎么編寫代碼?
03
標度
ggplot2會自動根據輸入變量選擇最優(yōu)的坐標刻度方法,若要手動設置或調整,就需要使用標度函數。
標度函數用來控制幾何對象中的標度映射(x軸,y軸或者由color,fill,shape,size產生的圖例)。
ggplot2提供豐富的標度函數,常用的有:
拓展功能:scales包提供很多設置刻度標簽風格的函數,比如百分數、科學計數法法、美元格式等。
3.1 修改坐標軸刻度及標簽
連續(xù)變量使用scale_*_continuous()函數,參數breaks設置各個刻度的位置,參數labels設置各個刻度對應的標簽。
離散變量使用scale_*_discrete()函數,修改離散變量坐標軸的標簽。
時間變量使用scale_x_date()函數設置日期刻度,參數date_breaks設置刻度間隔,date_labels設置標簽的日期格式
以mpg數據集為例,修改連續(xù)變量坐標軸刻度及標簽。
# scale_y_continuous函數
# 對比分析和觀察
# 圖1
ggplot(mpg, aes(displ, hwy)) +
geom_point()
# 圖2
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
scale_y_continuous(breaks = seq(15, 40, by = 10))
# 圖3
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
scale_y_continuous(breaks = seq(15, 40, by = 10),
labels = c(" 一五 "," 二五 "," 三五 "))
以mpg數據集為例,修改離散變量的標簽
# scale_x_discrete函數
# 對比分析和觀察
# 圖1
ggplot(mpg, aes(x = drv)) +
geom_bar()
# 圖2
ggplot(mpg, aes(x = drv)) +
geom_bar() +
scale_x_discrete(labels = c("4" = " 四驅 ", "f" = " 前驅 ",
"r" = " 后驅 "))
以ggplot2自帶的economics數據集為例,修改日期變量。
# scale_x_date函數
# 以ggplot2自帶的economics為例
economics %% glimpse()
# 圖1
ggplot(tail(economics, 45), aes(date, uempmed / 100)) +
geom_line()
# 圖2
ggplot(tail(economics, 45), aes(date, uempmed / 100)) +
geom_line() +
scale_x_date(date_breaks = "6 months", date_labels = "%Y-%b") +
scale_y_continuous(labels = scales::percent)
3.2 修改坐標軸標簽、圖例名及圖例位置
用labs()函數參數x,y或者xlab(),ylab(),設置x軸,y軸標簽。
若用參數color生成了圖例,可以在labs()函數用參數color修改圖例名。
用theme圖層的參數legend.position設置圖例的位置。
以mpg數據為例。
# 修改坐標軸標簽,圖例名和圖例位置
mpg
# 圖1
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
labs(x = " 引擎大小 (L)", y = " 高速燃油率 (mpg)",
color = " 驅動類型 ") +
theme(legend.position = "top")
# 圖2
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
xlab(" 引擎大小 (L)") +
ylab(" 高速燃油率 (mpg)") +
labs(color = " 驅動類型 ") +
theme(legend.position = "top")
# 圖3 不需要圖例
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
xlab(" 引擎大小 (L)") +
ylab(" 高速燃油率 (mpg)") +
theme(legend.position = "none")
3.3 設置坐標軸的范圍
用coord_cartesian()函數參數xlim和ylim,或者用xlim(),ylim()設置x軸和y軸的范圍。
以mpg數據集為例。
# 修改坐標軸的范圍
# 圖1 coord_cartesian()的參數xlim和ylim
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
coord_cartesian(xlim = c(5, 7), ylim = c(10, 30))
# 圖2 xlim()和ylim()函數
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
xlim(5, 7) +
ylim(10, 30)
3.4 變換坐標軸
用scale_x_log10()函數變換坐標系,可以保持原始數據的坐標刻度。
# 修改坐標軸的范圍
# 圖1 coord_cartesian()的參數xlim和ylim
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
coord_cartesian(xlim = c(5, 7), ylim = c(10, 30))
# 圖2 xlim()和ylim()函數
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
xlim(5, 7) +
ylim(10, 30)
3.5 設置圖形標題
用labs()函數設置圖形標題。
參數title 設置正標題
參數subtitle 設置副標題
參數caption 設置腳注標題(默認右下角)
# 設置標題
# mpg數據集為例
p - ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = drv)) +
geom_smooth(se = FALSE) +
labs(title = " 燃油效率與引擎大小的關系圖 ",
subtitle = " 兩座車 ( 跑車 ) 因重量小而符合預期 ",
caption = " 數據來自 fueleconomy.gov")
p
標題若要居中,采用theme圖層設置。
p + theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
3.6 設置color、fill顏色
數據的某個維度信息可以通過顏色來表示。
可以直接使用顏色值,建議使用RColorBrewer(調色板)或者colorspace包。
1)連續(xù)變量
- 用scale_color_gradient()設置二色漸變色。
# 連續(xù)變量
# 圖1 scale_color_gradient()函數
ggplot(mpg, aes(displ, hwy, color = hwy)) +
geom_point() +
scale_color_gradient(low = "green", high = "red")
- 用scale_color_distiller()設置調色板中的顏色
# 圖2 scale_color_distiller()函數
ggplot(mpg, aes(displ, hwy, color = hwy)) +
geom_point() +
scale_color_distiller(palette = "Set1")
2)離散變量
- 用scale_color_manual()手動設置顏色,還可以修改圖例及其標簽信息
# 離散變量
# 圖1 scale_color_manual()函數
ggplot(mpg, aes(displ, hwy, color = drv)) +
geom_point() +
scale_color_manual(" 驅動方式 ",
values = c("red", "blue", "green"),
breaks = c("4", "f", "r"))
ggplot(mpg, aes(displ, hwy, color = drv)) +
geom_point() +
scale_color_manual(" 驅動方式 ",
values = c("red", "blue", "green"),
labels = c(" 四驅 ", " 前驅 ", " 后驅 "))
-用scale_fill_brewer()調用調色板中的顏色
# 圖2 scale_fill_brewer()函數
ggplot(mpg, aes(x = class, fill = class)) +
geom_bar() +
scale_fill_brewer(palette = "Dark2")
.7 添加文字標注
ggrepel包提供了geom_label_repel()函數或者geom_text_repel()函數,為圖形添加文字標注。
操作步驟:
第一步:先準備好標記點的數據
第二步:增加文字標注圖層,包括標記點的數據和標注的文字給label參數
# 設置文字標注信息
library(ggrepel)
# 選取每種車型 hwy 值最大的樣本
best_in_class - mpg %%
group_by(class) %%
slice_max(hwy, n = 1)
best_in_class %% select(class, model, hwy)
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_label_repel(data = best_in_class,
aes(label = model))
04
計變換、坐標系和位置調整
.1 統計變換
統計變換是構建新的統計量而畫圖。
例如,條形圖或直方圖,是對數據分組的頻數做畫圖;平滑曲線是對數據擬合模型的預測值畫圖。
gplot2可以把統計變換直接融入畫圖中,不必先在對數據做統計變換后再畫圖。
gplot2提供30多種統計,均以stats_xxx()的方式命名。
1)可在幾何對象中直接使用的統計變換,直接使用幾何對象就可以了。
能在幾何對象創(chuàng)建的,而需要單獨使用。
mpg數據集為例。
stat_summary()做統計繪圖并匯總。
# 圖1 stat_summary()做統計繪圖并匯總
p - ggplot(mpg, aes(x = class, y = hwy)) +
geom_violin(trim = FALSE, alpha = 0.5, color = "green")
p
p + stat_summary(fun = mean,
fun.min = function (x) {mean(x) - sd(x)},
fun.max = function (x) {mean(x) + sd(x)},
geom = "pointrange",
color = "red")
tat_smooth()添加光滑曲線,與geom_smooth()相同。
參數method設置平滑曲線的擬合方法,如lm線性回歸、glm廣義線性回歸、loess多項式回歸、gam廣義加法模型(mgcv包)、rlm穩(wěn)健回歸(MASS包)等。
參數formula指定平滑曲線方程,如y ~ x, y ~ poly(x, 2), y ~ log(x)等。
參數se設置是否繪制置信區(qū)間。
# 圖2 stat_smooth()添加平滑曲線
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
stat_smooth(method = "lm",
formula = y ~ splines::bs(x, 3),
se = FALSE)
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_smooth(method = "lm",
formula = y ~ splines::bs(x, 3),
se = FALSE)
4.2 坐標系
ggplot2默認是直角坐標系。
- coord_cartesian()
常用的其它坐標系:
以mpg數據集為例,坐標軸翻轉。
# 圖1 坐標軸翻轉coord_flip()
p - ggplot(mpg, aes(class, hwy)) +
geom_boxplot()
p
p + coord_flip()
直角坐標下條形圖轉換為極坐標下玫瑰圖。
# 圖2 直角坐標條形圖--極坐標玫瑰圖
p - ggplot(mpg, aes(class, fill = drv)) +
geom_bar()
p
p + coord_polar()
4.3 位置調整
條形圖的位置調整
# 圖1:條形圖條形位置調整
ggplot(mpg, aes(class, fill = drv)) +
geom_bar()
ggplot(mpg, aes(class, fill = drv)) +
geom_bar(position = "dodge")
ggplot(mpg, aes(class, fill = drv)) +
geom_bar(position = position_dodge(preserve = "single"))
散點圖的散點位置調整
# 圖1:散點圖的散點位置調整
ggplot(mpg, aes(displ, hwy)) +
geom_point()
ggplot(mpg, aes(displ, hwy)) +
geom_point(position = "jitter")
用patchwork包排布多個圖形
library(patchwork)
p1 - ggplot(mpg, aes(displ, hwy)) +
geom_point()
p2 - ggplot(mpg, aes(drv, displ)) +
geom_boxplot()
p3 - ggplot(mpg, aes(drv)) +
geom_bar()
p1 | (p2 / p3)
p1 | p2 | p3
p1 / p2 / p3
p1 / (p2 | p3)
05
分面
利用分類變量把圖形分成若干“子圖”(面),實際上就是對數據分組后再畫圖,屬于數據分析里面細分和下鉆的思想。
5.1 用facet_wrap()函數
封裝分面,先生成一維的面板系列,再封裝到二維中。
語法形式:~ 分類變量 或者 ~ 分類變量1 + 分類變量2
參數scales設置是否共用坐標刻度,fixed 默認 共用, free 不共用,還可以額通過free_x,free_y單獨設置。