Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从零开始的异世界生信学习 R语言部分 05 作图-1

从零开始的异世界生信学习 R语言部分 05 作图-1

原创
作者头像
用户10361520
发布于 2023-03-05 14:21:22
发布于 2023-03-05 14:21:22
83300
代码可运行
举报
运行总次数:0
代码可运行

1.常用的可视化R包

可视化R包
可视化R包

2.三种R包的作图函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#作图分三类

#1.基础包 略显陈旧 了解一下
plot(iris[,1],iris[,3],col = iris[,5]) 
text(6.5,4, labels = 'hello')

dev.off() #关闭画板

#2.ggplot2 中坚力量,语法有个性
library(ggplot2)
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))

#3.ggpubr 新手友好型 ggplot2简化和美化 褒贬不一
library(ggpubr)
ggscatter(iris,
          x="Sepal.Length",
          y="Petal.Length",
          color="Species")

3.ggplot2语法

3.1入门级基础语法规则

ggplot2 入门级语法
ggplot2 入门级语法

ggplot2的特殊语法规则:列名不带引号,行末写加号(加号表示不同函数之间的连接)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
#1.入门级绘图模板:作图数据,横纵坐标
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length))

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

3.2.1手动设置,需要设置为有意义的值

属性设置
属性设置

color 颜色,可以用RGB编码值的字符串

size 大小,只能用数字

shape 形状,数字编号

alpha 透明度,0<x<1的数字

fill 填充颜色

只能全部统一设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length), 
             color = "blue")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length), 
             size = 5,     # 点的大小5mm
             alpha = 0.5,  # 透明度 50%
             shape = 8)  # 点的形状

3.2.2 映射:按照数据框的某一列来定义图的某个属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#2.2 映射:按照数据框的某一列来定义图的某个属性
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))
映射和手动输入的区别
映射和手动输入的区别
映射和手动输入的区别
映射和手动输入的区别
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Q1 能不能自行指定映射的具体颜色?

ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))+
  scale_color_manual(values = c("blue","grey","red"))
#color中的映射有多少个取值,manual应该就有几个颜色取值
映射的取值
映射的取值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Q2 区分color和fill两个属性
##color是颜色,fill是填充颜色
### Q2-1 空心形状和实心形状都用color设置颜色(形状中1-20都不需要填充颜色)
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 17) #17号,实心的例子

ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 2) #2号,空心的例子
17号形状,实心
17号形状,实心
2号形状,空心
2号形状,空心
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### Q2-2 既有边框又有内心的,才需要color和fill两个参数

ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 24,
             fill = "black") #24号,双色的例子,填充颜色为黑色
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data = iris)+
  geom_boxplot(mapping = aes(x = Species,
                           y = Sepal.Width,
                           fill= Species))
箱线图的颜色用fill函数填充
箱线图的颜色用fill函数填充

3.2.3 分面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#3.分面
ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + 
  facet_wrap(~ Species) 
##分面是根据数据的某一列把一张图分成若干的子图,根据列的取值分成若干的图
##用来分面的列:1.应该是分类变量,离散型数据;2.取值数量有限;
分面的图
分面的图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#双分面
dat = iris
dat$Group = sample(letters[1:5],150,replace = T)
ggplot(data = dat) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + 
  facet_grid(Group ~ Species)  #按照group列分隔行,species分隔列
  ##sample()函数表示随机取样
  ##dat$Group = sample(letters[1:5],150,replace = T) 表示在数据中新增了一列,其中按照内置数据letters(26个小写字母)中1-5A-E)中可重复的取150个值

3.2.4 几何对象

指一个以geom开头的函数画出来的所有东西称为一个几何对象,也称为了一个图层

几何对象可以叠加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#4.几何对象

#局部设置和全局设置

ggplot(data = iris) + 
  geom_smooth(mapping = aes(x = Sepal.Length, 
                          y = Petal.Length))+
  geom_point(mapping = aes(x = Sepal.Length, 
                           y = Petal.Length))  ##局部设置

ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))+
  geom_smooth()+
  geom_point()  ##全局设置
##两种代码的图一样
局部设置和全局设置
局部设置和全局设置

3.2.5 统计变换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#5.统计变换-直方图
View(diamonds)
table(diamonds$cut) ##内置数据钻石的切割质量

ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut))  ##geom_bar函数默认没有y参数

ggplot(data = diamonds) + 
  stat_count(mapping = aes(x = cut))
## 图片的横坐标为钻石切割质量,纵坐标为每个取值的格式。作图只需要一列
## geom开头的几何对象函数,stat开头的几何变换函数,两种函数存在对应
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#统计变换使用场景
#5.1.不统计,数据直接做图
fre = as.data.frame(table(diamonds$cut))
fre

ggplot(data = fre) +
  geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity")
#5.2count改为prop,统计比例而不是具体数目,group参数表示分类统一比例
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

3.2.6 位置关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 6.1抖动的点图
ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  geom_point()

ggplot(data = iris,mapping = aes(x = Species, 
                                 y = Sepal.Width,
                                 fill = Species)) + 
  geom_boxplot()+
  geom_jitter()   ##jitter绘制抖动的点图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 6.2堆叠直方图
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut,fill=clarity))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 6.3 并列直方图
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")

3.2.7 坐标系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#翻转coord_flip()

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + 
  geom_boxplot() +
  coord_flip()
##可以实现X轴,Y轴的转换
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#极坐标系coord_polar()
bar <- ggplot(data = diamonds) + 
  geom_bar(
    mapping = aes(x = cut, fill = cut), 
    width = 1
  ) + 
  theme(aspect.ratio = 1) +
  labs(x = NULL, y = NULL)
bar
bar + coord_flip()
bar + coord_polar()
ggplot2 画图模板
ggplot2 画图模板

##作图函数后面 +theme_classic() 可以去掉灰色的背景板

4. ggpubr 包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ggpubr 搜代码直接用,基本不需要系统学习

# sthda上有大量ggpubr出的图
library(ggpubr)
ggscatter(iris,x="Sepal.Length",
          y="Petal.Length",
          color="Species")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p <- ggboxplot(iris, x = "Species", 
               y = "Sepal.Length",
               color = "Species", 
               shape = "Species",
               add = "jitter")
p  ##ggplot2以及ggpubr绘制的图片可以进行赋值
my_comparisons <- list( c("setosa", "versicolor"), 
                        c("setosa", "virginica"), 
                        c("versicolor", "virginica") )
p + stat_compare_means(comparisons = my_comparisons)+ # Add pairwise comparisons p-value
  stat_compare_means(label.y = 9) 
ggpubr 可以给箱线图添加组间比较的P值
ggpubr 可以给箱线图添加组间比较的P值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data = iris, mapping = aes(x = Species,
                                               y = Sepal.Width))+
  geom_violin(mapping = aes(fill = Species))+
  geom_boxplot()+
  geom_jitter(mapping = aes(shape = Species))+
  coord_flip()
#  也可以通过增加这个函数调整点图的点的形状 scale_shape_manual(values = c())
# 图层的叠放顺序取决于代码的顺序,先写的代码图片在最底下

4.图片的保存和导出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#图片保存的三种方法

#1.基础包作图的保存
pdf("iris_box_ggpubr.pdf")
boxplot(iris[,1]~iris[,5])
text(6.5,4, labels = 'hello')
dev.off()

#2.ggplot系列图(包括ggpubr)通用的简便保存 ggsave
p <- ggboxplot(iris, x = "Species", 
               y = "Sepal.Length",
               color = "Species", 
               shape = "Species",
               add = "jitter")
ggsave(p,filename = "iris_box_ggpubr.png")
##保存的时候可以调节图片的参数,包括长宽以及像素,格式

#3.eoffice包 导出为ppt,全部元素都是可编辑模式
library(eoffice)
topptx(p,"iris_box_ggpubr.pptx")

5.拼图

注意学习!!!

STHDA网站有很多作图代码

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS 上传AppStore 被拒汇总
The seller and company names associated with your app do not reflect the name name of the company responsible for the service in the app or its metadata, as required by section 1.2 of the Apple Developer Program License Agreement.
iOS Magician
2023/03/22
1.6K0
如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总
苹果APP安装包ipa如何安装在手机上?很多人不知道怎么把ipa文件安装到手机上,这里就整理了苹果APP安装到iOS设备上的方式,仅供参考
iOS程序应用
2023/05/19
26.8K0
苹果app怎么上架
1、苹果要求版本更新必须使用iOS版本更新内置更新机制。 Design: Preamble Design Preamble Your app includes a responsive version button or alerts the user to update the app. To avoid user confusion, app version updates must utilize the iOS built-in update mechanism. Please see attached screenshots for details. Next Steps To resolve this issue, please remove the responsive version button feature from your app. To distribute a new version of your app, upload the new app binary version into the same iTunes Connect record you created for the app's previous version. Updated versions keep the same Apple ID, iTunes Connect ID (SKU), and bundle ID as the original version, and are available free to customers who purchased a previous version. Resources To create new versions of your app, please review the Create a new version section in iTunes Connect Developer Help. 翻译过来: 设计:序言 设计前言 您的应用程式包含响应式版本按钮,或提醒用户更新应用程式。 为了避免用户混淆,应用版本更新必须利用iOS内置的更新机制。 详情请参阅附录截图。 下一步 要解决此问题,请从应用程序中删除响应式版本按钮功能。 要分发新版本的应用程序,请将新的应用程序二进制版本上传到为应用程序的以前版本创建的iTunes Connect记录中。 更新的版本保持相同的Apple ID,iTunes Connect ID(SKU)和捆绑ID作为原始版本,对于购买以前版本的客户可以免费使用。 资源 要创建新版本的应用程序,请查看iTunes Connect开发人员帮助中的创建新版本部分。 解决办法:我的做法是给审核的时候隐藏检查版本检查更新功能 2、应用程序是专门为iPhone开发的,用户仍然可以在iPad上使用您的应用程序,而且不能影响正常的功能使用 2. 4 Performance: Hardware Compatibility Guideline 2.4.1 - Performance - Hardware Compatibility We noticed that your app did not run at iPhone resolution when reviewed on iPad running iOS 10.3.2. Specifically, the UI in this iPhone app is cut-off and unaccessible via scrolling on iPad. Please see attached screenshots for details. Next Steps To resolve this issue, please revise your app to ensure it runs and displays properly at iPhone resolution on iPad. Even if your app was developed specifically for iPhone, users should still be able to use your app on iPad. Resources For information on iOS device screen sizes and resolutions, please review the iOS Human Interface Guidelines as well as Points versus Pixels in the View Programming Guide for iOS. 翻译结果: 2.4性能:硬件兼容性 准则2.4.1 - 性能 - 硬件兼容性 我们注意到,在运行iOS 10.3.2的iPad上进
iOS程序应用
2023/04/17
6200
苹果app怎么上架
uni-app iOS平台-离线打包制作自定义基座
1、在打包原生工程里找到 control.xml文件,在HBuilder节点里查看是否有这2个: debug="true" syncDebug="true" 配置(注意-打AppStore包的时候,这个配置需要去掉,否则会导致热更新失败!),没有的话增加上,然后保存。
赵哥窟
2021/12/16
3K0
uni-app iOS平台-离线打包制作自定义基座
ipa文件怎么安装到iPhone手机上?
很多人都知道apk文件是安卓的app应用程序文件名,但有人知道苹果ios的app应用程序app是什么样的文件名吗? 是ipa文件。
爱学iOS的小麦子
2023/05/19
2.3K0
iOS上架App Store详解(图文)
通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程!
iOS程序应用
2023/03/17
1.6K0
appuploader 上架详解大全(上)
弹出空白错误提示,请下载最新版本的appuploader试试,或者删除appuploader目录下的data目录试试 收不到短信,请在发送类型地方选择短信类型,选择自己能收短信的号码,并且一天之内有总短信数量限制,没用超过数量
iOS Magician
2023/03/21
1.4K0
appuploader 上架详解大全(上)
​聊一聊iOS应用提审与发布
最近有不少朋友找我咨询iOS应用上架的一些相关问题,今天咱就花点时间整理一下我踩过的坑分享给大家!
可以叫我才哥
2022/04/12
4.1K0
​聊一聊iOS应用提审与发布
教你如何避规苹果审核条例PLA 1.2|4.3|4.2.2|2.3.7|2.1详细教程
The seller and company names associated with your app do not reflect a financial institution in the app or its metadata, as required by section 1.2 of the Apple Developer Program License Agreement.
jiang chen
2018/06/07
3K0
教你如何避规苹果审核条例PLA 1.2|4.3|4.2.2|2.3.7|2.1详细教程
小白如何在ios中安装ios上架
以前四布我们都做过,详细看这个博客:使用Appuploader在窗口上申请iOS开发所需的证书和描述文件,我们主要看下面的几个步骤。
iOS Magician
2023/03/22
1.1K0
小白如何在ios中安装ios上架
iOS App 上架App Store及提交审核详细教程
前四布我们之前都做了,详见这篇博客:利用Appuploader在window上申请IOS开发所需要的证书及描述文件,我们主要看后面几步。
爱学iOS的小麦子
2023/03/09
2.5K0
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关
接第四篇提交了安卓商店后,需要等待审核结果,但是目前苹果上架我们不能干等着,因此本文是你们最关心的苹果app上架app store流程来了,这里优雅草央千澈梳理了从开发者账户发行证书,打包APP,上传IPA,提交testflight,上传苹果商店的全流程,本流程没有借助第三方工具(市面上基本上都要花钱),但是需要仔细学习(第三方工具是需要花钱的,但是也便捷不少,土豪可以选择花钱)。
卓伊凡
2025/01/09
9290
APP上架需要的准备和流程
(1) 个人账号(Individual):费用99美金一年, 该账号在App Store销售者只能显示个人的ID,比如zhitian zhang,单人使用。个人账号只能有一个开发者。100个苹果的iOS设备UDID测试。​
iOS程序应用
2022/12/06
1.7K0
iOS 证书幕后原理
http://chuquan.me/2020/03/22/ios-certificate-principle/[1],转载已获得作者「楚权」授权。
卤代烃
2021/03/03
1.4K0
iOS 证书幕后原理
这些年iOS AppStore 套壳开发上架从棋牌类到彩票类在到如今的金融原油期货类App过程
下面给大家讲讲作者我“ios开发子”这些年iOS AppStore 套壳开发上架过程-从棋牌类到彩票类在到如今的金融原油期货类App-过程中所遇到的一些开发问题及解决方案心得给大家写下来分享分享!(由于字符限制,此为第一部分)
jiang chen
2018/08/17
3.5K0
这些年iOS AppStore 套壳开发上架从棋牌类到彩票类在到如今的金融原油期货类App过程
iOS应用上架详细图文教程
App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流程开始梳理,详细了解下iOS app上架的那些事。
爱学iOS的小麦子
2023/06/02
9720
IOS App测试的那些坑和解决方案
在测试中常见的,如 xcode 版本问题,打包证书问题,闪退无法重现,不好抓 log, 上架被拒问题等等。本文总结一些常见的坑,可以完美绕过去。
赵云龙龙
2019/11/10
4.5K0
三步走起 提升 iOS 审核通过率 上篇
image.png 2016年的第一天,各位小伙伴儿们,新年快乐~~~在过去一年里,负责 iOS 应用开发的同学们,想必已被 APP Store 的审核机制折磨心累不止。新的一年,又一轮审核即将来袭,你们做好准备了么? 为了帮助各位 iOS 应用开发的同学免受折磨,腾讯 Bugly 特邀互娱 iOS 预审团队通过大量的数据分析,对苹果的审核机制进行了一番总结,连夜赶稿写出提升 iOS 审核的通关秘籍(因为内容较多,因此分为上下两篇),来与大家分享。 经过互娱 iOS 预审团队近一年的数据监控,分析过往提审被
腾讯Bugly
2018/03/23
1.7K0
三步走起 提升 iOS 审核通过率 上篇
解读 AppStore 新功能:自定义产品页面和 A/B Test 工具
可能很多开发者还没有意识到,今年 WWDC21 推出 《Get ready to optimize your App Store product page》 是一个重磅功能!因为 iOS app 下载的地方,目前只有一个:App Store。所以,它是所有 app 能够提高暴光和决定用户是否下载最直接和最后的风口。如何包装好这个风口,最直接是影响下载量!而下载量意味着用户量。所以这个 Session 的重要性不言而喻,但是这个 Session 视频仅仅只有 8 分钟时间!为什么呢?咱们先留个伏笔,下文在解读。
37手游iOS技术运营团队
2021/07/19
2.3K0
解读 AppStore 新功能:自定义产品页面和 A/B Test 工具
用苹果官方 API 实现 iOS 备忘录的扫描文稿功能
iOS 系统自带的备忘录(Notes)在其质朴名称下提供了众多强大的功能,扫描文稿是我使用较多的功能之一。很早前便想在【健康笔记[2]】之中提供类似的功能,但考虑到其涉及的知识点较多,迟迟没有下手。最近在空闲时,将近年 WWDC 中涉及该功能实现的专题梳理、学习了一遍,受益匪浅。苹果官方早已为我们准备了所需的一切工具。本文将介绍如何通过 VisionKit、Vision、NaturalLanguage、CoreSpotlight 等系统框架实现与备忘录扫描文稿类似的功能。
东坡肘子
2022/07/28
1.5K0
用苹果官方 API 实现 iOS 备忘录的扫描文稿功能
推荐阅读
相关推荐
iOS 上传AppStore 被拒汇总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验