前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信马拉松 Day6

生信马拉松 Day6

原创
作者头像
阿呆的月历
发布2024-01-15 23:41:42
1530
发布2024-01-15 23:41:42
举报
文章被收录于专栏:生信马拉松生信马拉松

今天的主要内容是绘图,包含ggplot2、ggpurb和patchwork

开头一个小tips:在运行R project时,界面上最好每次只有一个脚本,否则不同脚本之间流程、变量容易混乱

1.强悍的ggplot2

代码语言:R
复制
library(ggplot2)  #画图第一步,包加载到位

ggplot2作图最基本的要求:给出作图数据+横纵坐标

代码语言:R
复制
# 基本模板
ggplot(data=<DATA>)+
   <GEOM-FUNCTION>(mapping=aes<MAPPINGS>)
#示例
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length))

注意:ggplot2的特殊语法:列名不带引号,画同一个图片的两个函数之间用“+”连接

1.属性设置(颜色、大小、透明度、点的形状,线型等)

方法1:手动设置,注意需要把实际参数设置为有意义的值

颜色:代表颜色的字符串如“#F8E6FF”,或"blue"、"red"等表示颜色的英文字符串

大小:单位默认是mm

形状:用1~20的数字变化表示

代码语言:R
复制
ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length), 
             color = "blue") 
              #这里手动改了颜色,注意位置是geom_point()的参数
代码语言:R
复制
ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length), 
             size = 5,     # 点的大小5mm
             alpha = 0.5,  # 透明度 50%
             shape = 8)  # 点的形状

方法2:映射,即按照数据框的某一列来定义图的某个属性(没有时就自己去构成一列)

代码语言:R
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))

映射和手动设置的对比:

1.映射中color是aes()的参数,是作图数据中的某个列的列名,代表根据这一列的内容分配颜色,不加引号

2.手动设置颜色是geom_xxx()的参数,只能是颜色有关的字符串,且需要加引号

如何自行指定映射的具体颜色

代码语言:R
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))+
  scale_color_manual(values = c("blue","grey","red"))

注意必须是映射,且scale_color_manual给的颜色数量需要和前文aes()中的color=species中的内容匹配出来

如果没有写映射,那么scale_color_manual代码将不会执行,但也不会报warning或error,但是代码不报错,不代表真的没错图片有歧义也是一种错误

相应的shape_manual以及fill_manual都需要在aes()里写上对应的映射,也有对应的scale_shape_manual和scale_fill_manual函数来调整映射的对象

类似的调色功能用RcolorBrewer实现时代码为:

代码语言:R
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))+
  scale_color_brewer(palette = 'Set1')

区分color和fill两个属性

空心形状和实心形状都用color设置颜色

代码语言:R
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 17) #17号,实心的例子
代码语言:R
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 2) #2号,空心的例子

既有边框又有内心的,才需要color和fill两个参数

代码语言:R
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length),
             shape = 24,
             color='red',
             fill='yellow') #手动设置fill和color

2.几何对象

一个geom_xxx()函数画出来的所有东西就得到一个几何对象,也就是一个图层,多个几何对象可以叠加,先写的函数在最底层

局部设置和全局设置

代码语言:R
复制
ggplot(data = iris) + 
  geom_smooth(mapping = aes(x = Sepal.Length, 
                            y = Petal.Length))+
  geom_point(mapping = aes(x = Sepal.Length, 
                           y = Petal.Length))

对于多个几何对象的情况,可以用如下方式简单写

代码语言:R
复制
ggplot(data = iris,mapping = aes(x = Sepal.Length, 
                                 y = Petal.Length))+
  geom_smooth()+
  geom_point()

也就是相同的内容都写在ggplot()里,是全局设置,对所有图层有效

而对于仅写在geom_xxx()里的设置,是局部设置,仅对单个geom_xxx()的图层有效

3.抖动的点图,jitter()

代码语言:R
复制
ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  geom_point()

此时散点图的点都集中在一条线上,重复叠加在一起,不能看清实际的样本数

两种操作方法:在geom_xxx()中增加position = "jitter"的参数,或者选用geom_jitter()代替geom_point()函数

代码语言:R
复制
ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  #geom_point(position = "jitter")
  geom_jitter()

4.坐标系

横纵轴替换的函数:coord_flip()

代码语言:R
复制
ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  geom_jitter()+ 
  coord_flip()

5.主题

theme_xx()系列函数

代码语言:R
复制
ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  geom_jitter()+ 
  theme_bw()#去掉灰格子的空白底
代码语言:R
复制
ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  geom_jitter()+ 
  theme_classic()#经典全白底

2.ggpubr

这个包就是审美升级的ggplot2,ggpubr能干的调调参数ggplot2也能干

此外差异在于这个包的画图函数逻辑和base包更像,想调整啥就直接改绘图包的参数

代码语言:R
复制
library(ggpubr)
p = ggboxplot(iris, x = "Species", y = "Sepal.Length",
              color = "Species", shape = "Species",add = "jitter")
p
优点是能简单快速出一个漂亮的图
优点是能简单快速出一个漂亮的图

下面展示的是一个特别适合ggpubr包作的箱线图的比较运算和加标记,ggplot2也能加,差别只是ggpurb的合适+好看

代码语言:R
复制
library(ggpubr)
p = ggboxplot(iris, x = "Species", y = "Sepal.Length",
              color = "Species", shape = "Species",add = "jitter")
p
my_comparisons <- list( c("setosa", "versicolor"), 
                        c("setosa", "virginica"), 
                        c("versicolor", "virginica") )
p + stat_compare_means(comparisons = my_comparisons,
                       aes(label = after_stat(p.signif)))
增加了比较之后的图
增加了比较之后的图

3.代码出图

除了Plots的Export之外的图片保存方法

但是存的时候都是按照Plots画板展示的比例存哦~

方法1:ggplot系列通用ggsave保存(当然也包括ggpurb)

已经在右下角画板里展示的的,就ggsave('文件名'),注意要写上文件名后缀,如jpeg、png等

右下角画板没有的,可以ggsave(p,filename = "iris_box_ggpubr.png"):

方法2:三段论

1.保存的函数及文件名,如pdf('test.pdf')、jpeg('test.jpeg'),注意文件的后缀名和函数必须一致

2.写作图代码,注意基础包画图,不同的函数连接不需要加“+”

3.dev.off()

方法3:eoffice包

可以导出为ppt格式,打开相应的ppt时可右键取消组合,就可以对各个元素进行修改

注意:

1.超多点的图或超多行列的热图不适用,ppt会卡掉

2.导出R语言之后的操作无法用代码复现,因此修改的细节一旦需要回炉工作量巨大

今日TIPS——代码可运行却不出图的解决方法

往往是因为画板被占用

1.dev.off()——关闭画板

多次运行dev.off(),到null device,或报错(说明画板已经关上)

2.采用dev.new()新建画板,抛弃原来的画板

3.重启R studio

总之到重新运行代码能出图

今日宝藏R package分享

1.好看的配色R包:RcolorBrewer以及paletter

2.方便的拼图R包:patchwork

最后一个无聊的分享

代码语言:R
复制
library(ggplot2)
ggplot(data = iris,mapping = aes(x=Species,y=Sepal.Width))+
  geom_violin(aes(fill=Species),color='yellow')+
  geom_boxplot(color='green')+
  geom_jitter(aes(shape=Species,color=Species))+
  coord_flip()+
  theme_bw()+
  scale_fill_manual(values = c('#C4B4F5','#F8E6FF','#E5B8CD'))+
  scale_shape_manual(values = c(1,3,5))

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.强悍的ggplot2
    • ggplot2作图最基本的要求:给出作图数据+横纵坐标
      • 1.属性设置(颜色、大小、透明度、点的形状,线型等)
        • 方法1:手动设置,注意需要把实际参数设置为有意义的值
        • 方法2:映射,即按照数据框的某一列来定义图的某个属性(没有时就自己去构成一列)
        • 如何自行指定映射的具体颜色
        • 区分color和fill两个属性
        • 空心形状和实心形状都用color设置颜色
        • 既有边框又有内心的,才需要color和fill两个参数
      • 2.几何对象
        • 局部设置和全局设置
      • 3.抖动的点图,jitter()
        • 4.坐标系
          • 5.主题
            • 方法1:ggplot系列通用ggsave保存(当然也包括ggpurb)
            • 方法2:三段论
            • 方法3:eoffice包
        • 2.ggpubr
        • 3.代码出图
        • 今日TIPS——代码可运行却不出图的解决方法
        • 今日宝藏R package分享
        • 最后一个无聊的分享
        相关产品与服务
        图数据库 KonisGraph
        图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档