R語言圖片之間的保存和導(dǎo)出

1.圖片保存

圖片保存的幾種方法:

1.1 基礎(chǔ)包作圖的保存

1.2 ggplot系列圖(包括ggpubr)通用的簡便保存 ggsave

1.3 pheatmap函數(shù)的圖保存方式

1.4 eoffice包 導(dǎo)出為ppt,全部元素都是可編輯模式

1.5 其它方式保存圖片(通用)

1.1 基礎(chǔ)包作圖的保存

不需要加載任何R包

通用:三段論

(1)圖片保存的格式及文件名: pdf("test.pdf")、png("test.png"),支持各種合格圖片的格式,注意對應(yīng)的后綴不能寫錯。

(2)作圖代碼:可以寫很多行代碼。

(3)圖畫完,關(guān)閉畫板:dev.off(),圖畫完需要終止符號。

圖畫完后,點擊保存的圖片,能打開說明正常,不能打開,可能代碼出了問題。

pdf("iris_box_ggpubr.pdf")
boxplot(iris[,1]~iris[,5])
text(6.5,4, labels = 'hello')
dev.off()
##先設(shè)置保存的格式為pdf,再畫圖,運行畫圖代碼后,圖片保存在工作目錄下。

1.2 ggplot系列圖(包括ggpubr)通用的簡便保存 ggsave

##保存直接保存)
ggsave("iris_box_ggpubr.png")
#右下角出的圖,用ggsave保存,后綴就是什么后綴,支持很多種格式,從幫助文檔里翻
##保存ggplot畫的圖

##賦值保存
library(ggpubr)
p <- ggboxplot(iris, x = "Species", 
               y = "Sepal.Length",
               color = "Species", 
               shape = "Species",
               add = "jitter")
ggsave(p,filename = "iris_box_ggpubr.png")
#給圖賦值,寫保存的名稱。

1.3 pheatmap函數(shù)的圖保存方式

### 第一種在pheatmap函數(shù)后面設(shè)置filename ="DEG_break_pheatmap.png" ,后綴可以是png或是pdf
p <- pheatmap(dat,scale = "row",show_colnames =T,show_rownames = F, 
              cluster_cols = T, 
              annotation_col=group,
              main = "edgeR's DEG",
              breaks = seq(-2,2,length.out = 100),
              filename ="DEG_break_pheatmap.png" )
p
### 第二種用普通包保存函數(shù)pdf,png,對應(yīng)的后綴要寫對
pdf("DEG_break_pheatmap.pdf")

###代碼正常運行,不出圖的情況下,運行以下兩句代碼
dev.off()
dev.new()

1.4 eoffice包 導(dǎo)出為ppt,全部元素都是可編輯模式

library(eoffice)
library(ggpubr)
p <- ggboxplot(iris, x = "Species", 
               y = "Sepal.Length",
               color = "Species", 
               shape = "Species",
               add = "jitter")
topptx(p,"iris_box_ggpubr.pptx")
##運行完代碼后在目錄下生成PPT文件

后綴.pptx不能寫錯,保存好后,打開PPT--點擊右鍵--取消組合,看到圖片有很多可編輯元素,可以編輯橫縱坐標的字體字號,圖片的顏色等做一些修飾,切忌不可造假圖片。能用代碼解決的事情堅決用代碼,后面需要用到ppt編輯再編輯。

1.5 其它方式保存

有時候遇到新的畫圖函數(shù),但是之前沒接觸過,著急且查不到代碼時??梢源蜷_當前圖片框,點擊export保存,在工作目錄下。保存圖片多的時候比較占時間,還是學(xué)會用代碼保存最好。

2.拼圖

2.1 R包patchwork

語法簡單,完美兼容ggplot2

拼圖比例設(shè)置簡單

(1)支持直接p1+p2,比任何一個包簡單

(2)復(fù)雜的布局代碼易讀性更強

(3)可以給子圖添加標記(例如ABCD,I,II,III,IV這樣)

(4)可以統(tǒng)一修改所有子圖

(5)可以將子圖的圖例移到一起,整體性特別好。

(來自生信技能樹小潔老師課件描述)

library(patchwork)
p1=ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))

p2=ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut,fill=clarity))

R包patchwork的其它介紹

https://mp.weixin.qq.com/s/p7LLLvzR5LPgHhuRGhYQBQ

library(ggplot2)
colnames(iris)
p1=ggplot(iris,aes(Sepal.Length,Sepal.Width))+
  geom_point(aes(color=Species))#color=Species

p2=ggplot(iris,aes(Sepal.Length,Sepal.Width))+
  geom_point(aes(color=Sepal.Length))#color=Sepal.Length

library(patchwork)##拼圖前一定要加載
p1+p2
##拼圖后,可以用gglpot2的保存方式去保存

注意的問題:

代碼可運行卻不出圖,是因為畫板被占用

使用代碼:dev.off()關(guān)閉畫板,出現(xiàn)null device

多次運行dev.off(),到出現(xiàn)null device,再重新運行出圖代碼或dev.new()

dev.off()報錯,提示關(guān)閉畫板不存在,慣著它,特例的報錯,不用管

遇到問題可以運行dev.new(),不行重啟Rstudio,再不行重啟電腦:每次重啟都會把一些被破壞的默認設(shè)置恢復(fù)到原樣。

3.畫圖合輯

3.1 小潔老師的語雀專輯

復(fù)習(xí)補充:連續(xù)型和分散型,以iris為例

library(ggplot2)
colnames(iris)
#圖一代碼
ggplot(iris,aes(Sepal.Length,Sepal.Width))+
  geom_point(aes(color=Species))#color=Species,
#圖二代碼
ggplot(iris,aes(Sepal.Length,Sepal.Width))+
  geom_point(aes(color=Sepal.Length))#color=Sepal.Length

兩者行代碼畫出的圖,不一樣,圖一的點圖有3種顏色,圖二的圖幾乎只有一種顏色

iris$Species#是離散型數(shù)據(jù),table(iris$Species)有三個獨立的值,互不相干的顏色
iris$Sepal.Length#就一堆數(shù)字,sort(iris$Sepal.Length),4.3連續(xù)到7.9不好分顏色

畫圖箱線圖,希望橫坐標按順序排序,但是橫坐標不是數(shù)字,ggplot默認的橫坐標順序與自己的想象有差別,是因為有因子存在,因子有些爭議,有人認為它是數(shù)據(jù)類型,有人認為它是數(shù)據(jù)結(jié)構(gòu)。

iris$Species
##最后一列有Levels,Levels是因子的關(guān)鍵詞,因子水平的意思
class(iris$Species)
#[1] "factor"
##R語言基礎(chǔ)比較扎實時再去完因子,不然會崩潰。

##調(diào)整橫坐標會用到有序因子

畫箱線圖時,連續(xù)型的數(shù)值不能作為橫縱標,要有重復(fù)值,這個以后慢慢去理解

library(ggstatsplot)
##用這個包里函數(shù)的一句代碼畫出非常漂亮的小提琴圖,難點是這個包的安裝,一個個包找去z

##熱圖學(xué)習(xí)
?pheatmap
##幫助文檔是最好學(xué)習(xí)熱圖的教程

3.2 資料里有曾老師給的腳本和html文件

詳細介紹很多種圖的一步一步畫法

畫圖部分的擴展學(xué)習(xí)文件:

基礎(chǔ)包畫圖500行代碼:zz_Basic plot in R for biotrainee .R

ggplot2畫圖50個案例:top50ggplot.html

4.總結(jié):

一般畫圖都是找別人的代碼(R 火山圖搜索),把自己的數(shù)據(jù)套進去,解決自己的數(shù)據(jù)與別人數(shù)據(jù)的差別,就是把自己的數(shù)據(jù)整理成與示例的數(shù)據(jù)一樣。

難點不是作圖代碼,而是如何將自己的數(shù)據(jù)整理成示例數(shù)據(jù)的樣子。不同的圖,示例數(shù)據(jù)是不一樣的,有的是需要矩陣,有的是要數(shù)據(jù)框,有的是要數(shù)值型或是其它類型。作圖數(shù)據(jù)不可能都是統(tǒng)一類型。

要根據(jù)自己的R語言基礎(chǔ)去搞明白,比較數(shù)據(jù),能運行成功和不能運行成功的數(shù)據(jù)差在哪里:

數(shù)據(jù)結(jié)構(gòu)(人家的是矩陣,你的是數(shù)據(jù)框),數(shù)據(jù)類型(人家的是純數(shù)值型,你的里邊夾雜一些字符型,邏輯型):用class函數(shù),str函數(shù),is.xx函數(shù)判斷。

行、列的組織方式、對應(yīng)關(guān)系(人家的一行是一個基因,你的一列是一個基因;人家有兩個或是多個示例數(shù)據(jù),這兩個示例數(shù)據(jù)或是多個示例數(shù)據(jù)之間有對應(yīng)關(guān)系,如兩個表達矩陣,一個表達矩陣的某個信息有6個列,而你的信息有8列,和另一個表達矩陣某一行對應(yīng)關(guān)系):使用轉(zhuǎn)置函數(shù)t()。

(如果以上的信息排除了,可能有以下情況)

缺失值,異常值,重復(fù)值等

有的列名還有要求一樣,這個比較少見。

最常見要求是:數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)類型

說明

以上內(nèi)容是聽生信技能樹小潔老師的R語言線上課,根據(jù)自己的理解記錄下來,小潔老師授課非常細心,對不同水平的同學(xué)都照顧到,并且補充很多技巧(拼圖最好用的包)以及注意事項。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容