R语言图片之间的保存和导出

1.图片保存

图片保存的几种方法:

1.1 基础包作图的保存

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

1.3 pheatmap函数的图保存方式

1.4 eoffice包 导出为ppt,全部元素都是可编辑模式

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

1.1 基础包作图的保存

不需要加载任何R包

通用:三段论

(1)图片保存的格式及文件名: pdf("test.pdf")、png("test.png"),支持各种合格图片的格式,注意对应的后缀不能写错。

(2)作图代码:可以写很多行代码。

(3)图画完,关闭画板:dev.off(),图画完需要终止符号。

图画完后,点击保存的图片,能打开说明正常,不能打开,可能代码出了问题。

pdf("iris_box_ggpubr.pdf")
boxplot(iris[,1]~iris[,5])
text(6.5,4, labels = 'hello')
dev.off()
##先设置保存的格式为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函数的图保存方式

### 第一种在pheatmap函数后面设置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
### 第二种用普通包保存函数pdf,png,对应的后缀要写对
pdf("DEG_break_pheatmap.pdf")

###代码正常运行,不出图的情况下,运行以下两句代码
dev.off()
dev.new()

1.4 eoffice包 导出为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 其它方式保存

有时候遇到新的画图函数,但是之前没接触过,着急且查不到代码时。可以打开当前图片框,点击export保存,在工作目录下。保存图片多的时候比较占时间,还是学会用代码保存最好。

2.拼图

2.1 R包patchwork

语法简单,完美兼容ggplot2

拼图比例设置简单

(1)支持直接p1+p2,比任何一个包简单

(2)复杂的布局代码易读性更强

(3)可以给子图添加标记(例如ABCD,I,II,III,IV这样)

(4)可以统一修改所有子图

(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()关闭画板,出现null device

多次运行dev.off(),到出现null device,再重新运行出图代码或dev.new()

dev.off()报错,提示关闭画板不存在,惯着它,特例的报错,不用管

遇到问题可以运行dev.new(),不行重启Rstudio,再不行重启电脑:每次重启都会把一些被破坏的默认设置恢复到原样。

3.画图合辑

3.1 小洁老师的语雀专辑

复习补充:连续型和分散型,以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#是离散型数据,table(iris$Species)有三个独立的值,互不相干的颜色
iris$Sepal.Length#就一堆数字,sort(iris$Sepal.Length),4.3连续到7.9不好分颜色

画图箱线图,希望横坐标按顺序排序,但是横坐标不是数字,ggplot默认的横坐标顺序与自己的想象有差别,是因为有因子存在,因子有些争议,有人认为它是数据类型,有人认为它是数据结构。

iris$Species
##最后一列有Levels,Levels是因子的关键词,因子水平的意思
class(iris$Species)
#[1] "factor"
##R语言基础比较扎实时再去完因子,不然会崩溃。

##调整横坐标会用到有序因子

画箱线图时,连续型的数值不能作为横纵标,要有重复值,这个以后慢慢去理解

library(ggstatsplot)
##用这个包里函数的一句代码画出非常漂亮的小提琴图,难点是这个包的安装,一个个包找去z

##热图学习
?pheatmap
##帮助文档是最好学习热图的教程

3.2 资料里有曾老师给的脚本和html文件

详细介绍很多种图的一步一步画法

画图部分的扩展学习文件:

基础包画图500行代码:zz_Basic plot in R for biotrainee .R

ggplot2画图50个案例:top50ggplot.html

4.总结:

一般画图都是找别人的代码(R 火山图搜索),把自己的数据套进去,解决自己的数据与别人数据的差别,就是把自己的数据整理成与示例的数据一样。

难点不是作图代码,而是如何将自己的数据整理成示例数据的样子。不同的图,示例数据是不一样的,有的是需要矩阵,有的是要数据框,有的是要数值型或是其它类型。作图数据不可能都是统一类型。

要根据自己的R语言基础去搞明白,比较数据,能运行成功和不能运行成功的数据差在哪里:

数据结构(人家的是矩阵,你的是数据框),数据类型(人家的是纯数值型,你的里边夹杂一些字符型,逻辑型):用class函数,str函数,is.xx函数判断。

行、列的组织方式、对应关系(人家的一行是一个基因,你的一列是一个基因;人家有两个或是多个示例数据,这两个示例数据或是多个示例数据之间有对应关系,如两个表达矩阵,一个表达矩阵的某个信息有6个列,而你的信息有8列,和另一个表达矩阵某一行对应关系):使用转置函数t()。

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

缺失值,异常值,重复值等

有的列名还有要求一样,这个比较少见。

最常见要求是:数据结构,数据类型

说明

以上内容是听生信技能树小洁老师的R语言线上课,根据自己的理解记录下来,小洁老师授课非常细心,对不同水平的同学都照顾到,并且补充很多技巧(拼图最好用的包)以及注意事项。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容