折線圖通常用來對兩個連續變量之間的相互依存關係進行可視化。x軸可以是連續型變量,也可以是離散型變量。生物學中,通常用來表示不同藥物劑量下實驗對象的變化,或者是基因在不同類型組織或細胞中的表達模式。
1. 基礎函數簡單示例:使用plot()函數,改變參數type,更多類型請查看幫助文檔。
# 查看作圖數據
BOD
# Time demand
# 1 1 8.3
# 2 2 10.3
# 3 3 19.0
# 4 4 16.0
# 5 5 15.6
# 6 7 19.8
op <- par(no.readonly = T)
library(dplyr)
library(tidyverse)
par(mfrow = c(2,2))
BOD %>% {
plot(demand ~ Time,data = .,type = "l",main = "A")
plot(demand ~ Time,data = .,type = "b",main = "A")
plot(demand ~ Time,data = .,type = "s",main = "A")
plot(demand ~ Time,data = .,type = "o",main = "A")
}
par(op)目前,基礎函數繪製多個分組折線圖,需要藉助lines()函數。
op <- par(no.readonly = T)
library(dplyr)
library(tidyverse)
par(mar = c(rep(4,4)))
BOD %>% {
plot(demand ~ Time,data = .,type = "l",col = "red",lwd = 2)
lines(1:7,seq(8,20,length.out = 7),col = "steelblue",lwd = 2)
}
par(op)多個分組時,可以藉助for循環實現。
2. ggplot()函數不加任何參數繪製簡單折線圖。
library(ggplot2)
BOD %>% {
ggplot(.,aes(Time,demand))+geom_line()
}
在這裡插入圖片描述library(ggplot2)
library(patchwork)
BOD %>% {
p1 <- ggplot(.,aes(Time,demand))+geom_line()
p2 <- ggplot(.,aes(factor(Time),demand,group = 1))+geom_line()
p1 + p2
}為了比較因子型和連續型變量的不同,我們將兩張圖放在一起,可以發現右圖中並沒有6這個水平。當 x 對應於因子型變量時,必須使用命令 aes(group=1) 以確保 ggplot() 知道這些數據點屬於同一個分組,從而應該用一條折線連在一起。相比於基礎函數,ggplot繪製分組折線圖簡直不要太方便。%>%是管道符,需要加載dplyr包,**{}也可以理解為管道符,.**代表上一級生成的數據,p1 + p2 需要加載patchwork拼圖包。
library(plyr)
ToothGrowth %>%
ddply(c("supp", "dose"), summarise, length=mean(len)) %>% {
p1 <- ggplot(.,aes(x=dose, y=length, colour=supp)) + geom_line()
p2 <- ggplot(.,aes(x=dose, y=length, linetype=supp)) + geom_line()
p1 + p2
}如圖,分別將supp映射給了顏色和線條類型。如果要添加數據點等其他類型,可以通過geom系列函數實現。
來吧,實踐吧!
3. 實踐我使用的是自己的小鼠早期胚胎卵母細胞到8細胞各時期的測序數據,挑選了大約3300條轉錄本。縱坐標使用的是log2(FPKM)值。一起來看看ggplot繪製分組折線圖有多方便吧
首先需要將數據組織成長數據格式。
head(oo1_long)
在這裡插入圖片描述x <- length(unique(oo1_long$t))
ggplot(data=oo1_long, aes(x=variable, y=value, group=t)) +
geom_line(alpha = oo1_long$alpha,color = oo1_long$color,size = oo1_long$size)+
theme_bw()+
scale_y_continuous(expand = c(0,0))+
scale_x_discrete(expand = c(0,0))+
ylab(label = "log2(fpkm)")+
xlab(label = "")+
geom_text(aes(4,10.2,label =paste("cluster1-1", x-1 , sep = '\n')))
在這裡插入圖片描述其實上面的代碼還可以再優化,使用aes()函數設置color等參數。
總結ggplot2是一款強大的R繪圖包,相較於已被封裝好的在線軟體等其他工具,其具有更多的靈活性和可操作性。
光看不練假把式,必須要行動起來!
參考書籍[1] 《R數據可視化手冊》