前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言绘图练习——ggplot2画tSNE的聚类点图(带圈带阴影)

R语言绘图练习——ggplot2画tSNE的聚类点图(带圈带阴影)

作者头像
生信技能树
发布2021-07-29 11:37:41
4.7K0
发布2021-07-29 11:37:41
举报
文章被收录于专栏:生信技能树
咱们生信技能树马拉松课程七月份学习班正在火热进行中,统计可视化知识点授课结束后照例给大家布置一些作业!精选部分优秀作业供大家学习:

下面七月份学员的投稿

题目:

  • 题目是生信技能树曾老师出的一道题:

绘图:

  1. 首先加载数据,然后用查看一下数据长什么样子
代码语言:javascript
复制
rm(list=ls())
load("for_tSNE.pos.Rdata")
dim(dat)
代码语言:javascript
复制
## [1] 619   4
代码语言:javascript
复制
head(dat)
代码语言:javascript
复制
##          tSNE_1    tSNE_2  cell cluster
## 6A-11 -1.910859 -26.09210 6A-11       2
## 6A-13 -3.498666 -27.66961 6A-13       2
## 6A-14 -7.646899 -12.26195 6A-14       2
## 6A-15 -2.986069 -27.00602 6A-15       2
## 6A-16 -7.633320 -12.21226 6A-16       2
## 6A-17 -4.207616 -25.12467 6A-17       2
代码语言:javascript
复制
str(dat)
代码语言:javascript
复制
## 'data.frame':	619 obs. of  4 variables:
##  $ tSNE_1 : num  -1.91 -3.5 -7.65 -2.99 -7.63 ...
##  $ tSNE_2 : num  -26.1 -27.7 -12.3 -27 -12.2 ...
##  $ cell   : chr  "6A-11" "6A-13" "6A-14" "6A-15" ...
##  $ cluster: Factor w/ 5 levels "0","1","2","3",..: 3 3 3 3 3 3 3 3 3 3 ...
  1. 开始画图:

首先,可以看出这张图是张点图,而x轴、y轴和点的颜色分别对应数据中的tSNE_1、tSNE_2和cluster,所以用映射来实现。

代码语言:javascript
复制
library(ggplot2)
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point()

因为一直对因子这个概念比较模糊,试一试如果cluster不是因子会怎么样。先看看如果是数值:

代码语言:javascript
复制
dat$cluster=as.numeric(dat$cluster)
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point()

如果是字符:

代码语言:javascript
复制
dat$cluster=as.character(dat$cluster)
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point()

这里可以看出,如果cluster是数值型,那么不转为因子的情况下用来分组就会出现大问题:R会把每一个数值都看成是一个分组,用深浅来代表不同分组。

如果cluster是一个字符串,就不会出现这个问题,得到的结果和因子是一样的。

  1. 回到正题,给cluster添加一个圆圈在ggplot2中通过stat_ellipse()实现。
代码语言:javascript
复制
rm(list=ls())
load("for_tSNE.pos.Rdata")
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point()+
  stat_ellipse()
  1. 修改图片细节:
  • stat_ellipse()中增加参数,按cluster画填充
代码语言:javascript
复制
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point()+
  stat_ellipse(aes(fill=cluster),
               geom = "polygon")
  • 把填充的透明度改一改
代码语言:javascript
复制
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point()+
  stat_ellipse(aes(fill=cluster),
               geom = "polygon",
               alpha=1/5)
  • 最后再对图片进行一些微调:点的大小、圆圈实线改虚线、圆圈线的粗细、坐标轴的出戏以及主题等等。
代码语言:javascript
复制
ggplot(dat,mapping = aes(x=tSNE_1,
                         y=tSNE_2,
                         col=cluster))+
  geom_point(size=2)+
  stat_ellipse(aes(fill=cluster),
               geom = "polygon",
               linetype = 2,        ###圆圈线的类型
               size=1,              ###圆圈线的粗细
               alpha=1/5)+
  theme_classic()+
  theme(axis.line = element_line(size=1.2, colour = "black"))  ###坐标轴的粗细

对比一下:

这次练习所get到的几个新的知识点:

  1. 画图时按照因子/数值/字符分组产生的区别
  2. ggplot2画点图时可以使用stat_ellipse()画圆圈
  3. 坐标系微调的一些细节,更多内容参考https://blog.csdn.net/Bone_ACE/article/details/47427453
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 绘图:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档