广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >R语言学习之线图的绘制详解
  • 387
分享到

R语言学习之线图的绘制详解

2024-04-02 19:04:59 387人浏览 安东尼
摘要

目录线图单线图多线图横轴文本线图线图 线图是反映趋势变化的一种方式,其输入数据一般也是一个矩阵。 单线图 假设有这么一个矩阵,第一列为转录起始位点及其上下游5 kb的区域,第二列为H

线图

线图是反映趋势变化的一种方式,其输入数据一般也是一个矩阵。

单线图

假设有这么一个矩阵,第一列为转录起始位点及其上下游5 kb的区域,第二列为H3K27ac修饰在这些区域的丰度,想绘制一张线图展示。

profile="Pos;H3K27ac
-5000;8.7
-4000;8.4
-3000;8.3
-2000;7.2
-1000;3.6
0;3.6
1000;7.1
2000;8.2
3000;8.4
4000;8.5
5000;8.5"

读入数据 (经过前面几篇的联系,这应该都很熟了)

profile_text <- read.table(text=profile, header=T, row.names=1, quote="",sep=";")
profile_text
      H3K27ac
-5000     8.7
-4000     8.4
-3000     8.3
-2000     7.2
-1000     3.6
0         3.6
1000      7.1
2000      8.2
3000      8.4
4000      8.5
5000      8.5
# 在melt时保留位置信息
# melt格式是ggplot2画图最喜欢的格式
# 好好体会下这个格式,虽然多占用了不少空间,但是确实很方便

# 这里可以用 `xvariable`,也可以是其它字符串,但需要保证后面与这里的一致
# 因为这一列是要在X轴显示,所以起名为`xvariable`。
profile_text$xvariable = rownames(profile_text)
library(ggplot2)
library(reshape2)
data_m <- melt(profile_text, id.vars=c("xvariable"))
data_m
   xvariable variable value
1      -5000  H3K27ac   8.7
2      -4000  H3K27ac   8.4
3      -3000  H3K27ac   8.3
4      -2000  H3K27ac   7.2
5      -1000  H3K27ac   3.6
6          0  H3K27ac   3.6
7       1000  H3K27ac   7.1
8       2000  H3K27ac   8.2
9       3000  H3K27ac   8.4
10      4000  H3K27ac   8.5
11      5000  H3K27ac   8.5

然后开始画图,与上面画heatmap一样。

# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。
p <- ggplot(data_m, aes(x=xvariable, y=value),color=variable) + geom_line()
p
# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off()
dev.off()

满心期待一个倒钟形曲线,结果,

什么也没有。

仔细看,出来一段提示

geom_path: Each group consists of only one observation. 
Do you need to adjust the group aesthetic?

原来默认ggplot2把每个点都视作了一个分组,什么都没画出来。而data_m中的数据都来源于一个分组H3K27ac,分组的名字为variable,修改下脚本,看看效果。

p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) + 
     geom_line() + theme(legend.position=c(0.1,0.9))
p
dev.off()

图出来了,一条线,看一眼没问题;再仔细看,不对了,怎么还不是倒钟形,原来横坐标错位了。

检查下数据格式

summary(data_m)
  xvariable      variable        
 Length:11       H3K27ac:11     
 Class :character             
 Mode  :character        

问题来了,xvariable虽然看上去数字,但存储的实际是字符串 (因为是作为行名字读取的),需要转换为数字。

data_m$xvariable <- as.numeric(data_m$xvariable)

#再检验下
is.numeric(data_m$xvariable)
[1] TRUE

好了,继续画图。

# 注意断行时,加号在行尾,不能放在行首
p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) +
     geom_line() + theme(legend.position=c(0.1,0.8))
p
dev.off()

图终于出来了,调了下legend的位置,看上去有点意思了。

有点难看,如果平滑下,会不会好一些,stat_smooth可以对绘制的线进行局部拟合。在不影响变化趋势的情况下,可以使用 (但慎用)。

p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) + 
     geom_line() + stat_smooth(method="auto", se=FALSE) + 
     theme(legend.position=c(0.1,0.8))
p
dev.off()

从图中看,趋势还是一致的,线条更优美了。另外一个方式是增加区间的数量,线也会好些,而且更真实。

stat_smoothgeom_line各绘制了一条线,只保留一条就好。

p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) + 
     stat_smooth(method="auto", se=FALSE) + theme(legend.position=c(0.1,0.8))
p
dev.off()

好了,终于完成了单条线图的绘制。

多线图

那么再来一个多线图的例子吧,只要给之前的数据矩阵多加几列就好了。

profile = "Pos;h3k27ac;ctcf;enhancer;h3k4me3;polII
-5000;8.7;10.7;11.7;10;8.3
-4000;8.4;10.8;11.8;9.8;7.8
-3000;8.3;10.5;12.2;9.4;7
-2000;7.2;10.9;12.7;8.4;4.8
-1000;3.6;8.5;12.8;4.8;1.3
0;3.6;8.5;13.4;5.2;1.5
1000;7.1;10.9;12.4;8.1;4.9
2000;8.2;10.7;12.4;9.5;7.7
3000;8.4;10.4;12;9.8;7.9
4000;8.5;10.6;11.7;9.7;8.2
5000;8.5;10.6;11.7;10;8.2"

profile_text <- read.table(text=profile, header=T, row.names=1, quote="",sep=";")

profile_text$xvariable = rownames(profile_text)
data_m <- melt(profile_text, id.vars=c("xvariable"))
data_m$xvariable <- as.numeric(data_m$xvariable)

# 这里group=variable,而不是group=1 (如果上面你用的是1的话)
# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。
p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) + 
     stat_smooth(method="auto", se=FALSE) + theme(legend.position=c(0.85,0.2))
p
dev.off()

横轴文本线图

如果横轴是文本,又该怎么调整顺序呢?还记得之前热图旁的行或列的顺序调整吗?重新设置变量的factor水平就可以控制其顺序。

profile = "Pos;h3k27ac;ctcf;enhancer;h3k4me3;polII
-5000;8.7;10.7;11.7;10;8.3
-4000;8.4;10.8;11.8;9.8;7.8
-3000;8.3;10.5;12.2;9.4;7
-2000;7.2;10.9;12.7;8.4;4.8
-1000;3.6;8.5;12.8;4.8;1.3
0;3.6;8.5;13.4;5.2;1.5
1000;7.1;10.9;12.4;8.1;4.9
2000;8.2;10.7;12.4;9.5;7.7
3000;8.4;10.4;12;9.8;7.9
4000;8.5;10.6;11.7;9.7;8.2
5000;8.5;10.6;11.7;10;8.2"

profile_text <- read.table(text=profile, header=T, row.names=1, quote="",sep=";")

profile_text_rownames <- row.names(profile_text)

profile_text$xvariable = rownames(profile_text)
data_m <- melt(profile_text, id.vars=c("xvariable"))

# 就是这一句,会经常用到
data_m$xvariable <- factor(data_m$xvariable, levels=profile_text_rownames, ordered=T)

# geom_line设置线的粗细和透明度
p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) + 
     geom_line(size=1, alpha=0.9) + theme(legend.position=c(0.85,0.2)) +
     theme(axis.text.x=element_text(angle=45,hjust=1, vjust=1))

# stat_smooth
#p <- ggplot(data_m, aes(x=xvariable, y=value,color=variable,group=variable)) + 
#     stat_smooth(method="auto", se=FALSE) + theme(legend.position=c(0.85,0.2)) +
#     theme(axis.text.x=element_text(angle=45,hjust=1, vjust=1))

p
dev.off()

比较下位置信息做为数字(前面的线图)和位置信息横轴的差别。当为数值时,ggplot2会选择合适的几个刻度做标记,当为文本时,会全部标记。另外文本横轴,smooth效果不明显 (下面第2张图)。

至此完成了线图的基本绘制,虽然还可以,但还有不少需要提高的地方,比如在线图上加一条或几条垂线、加个水平线、修改X轴的标记(比如0换为TSS)、设置每条线的颜色等。具体且听下回一步线图法。

到此这篇关于R语言学习之线图的绘制详解的文章就介绍到这了,更多相关R语言绘制线图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: R语言学习之线图的绘制详解

本文链接: https://www.lsjlt.com/news/140949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • R语言学习之线图的绘制详解
    目录线图单线图多线图横轴文本线图线图 线图是反映趋势变化的一种方式,其输入数据一般也是一个矩阵。 单线图 假设有这么一个矩阵,第一列为转录起始位点及其上下游5 kb的区域,第二列为H...
    99+
    2022-11-13
  • R语言学习之火山图的绘制详解
    目录火山图输入数据格式使用significant列绘制火山图自动计算significant列绘制火山图火山图中标记基因的名字火山图 火山图用于展示基因表达差异的分布,横轴为Log2 ...
    99+
    2022-11-13
  • R语言学习之基础绘图详解
    目录散点图曲线图条形图饼图R语言内置了一些基础的绘图函数,主要包括 散点图曲线图条形图饼图plotcurvebarplotpie 这些绘图函数参数各异,但有个别参数相对来说比较通用,...
    99+
    2023-03-22
    R语言基础绘图 R语言绘图
  • R语言绘图学习教程VennDiagram绘制venn
    目录导读一、模拟输入二、venn基础图三、个性化参数调整四、保存导读 使用VennDiagram函数包中的venn.diagram函数绘制三数据集venn图。 安装依赖包: # ve...
    99+
    2022-11-13
  • R语言学习ggplot2绘制统计图形包全面详解
    目录一、序二、ggplot2是什么?三、ggplot2能画出什么样的图?四、组装机器五、设计图纸六、机器的零件1. 零件——散点图1) 变换颜色2) 拟合曲线3) 变换大小4) 修改...
    99+
    2022-11-12
  • R语言绘制line plot线图示例详解
    目录Step1. 绘图数据的准备Step2. 绘图数据的读取Step3. 绘图所需package的安装、调用Step4. 绘图最近小仙同学在Nature Cell Biology上看...
    99+
    2022-11-13
  • R语言利用ggplot2绘制QQ图和箱线图详解
    目录绘制qq图函数介绍例子绘制boxplot函数介绍例子利用分位点绘制箱线图将QQ图和箱线图进行融合函数介绍参数介绍注意事项例子绘制qq图 在ggplot2中绘制qq图需要两步,ge...
    99+
    2022-11-13
  • R语言作图之直方图histogram绘制过程详解
    先给大家介绍下R语言入门:直方图histogram的绘制,具体内容如下所示: 直方图和条形图最大的不同则是直方图可以用于显示出一个数据的频数,具有统计的作用,我们下面来看一一看直方图...
    99+
    2022-11-11
  • R语言学习VennDiagram包绘制韦恩图示例
    目录引言一 需要安装和导入的包二 使用函数及参数三 知道各个数据集的个数以及重叠(交叉)的个数2.1 两个已知数据集的韦恩图2.2 三个已知数据集的韦恩图四 根据数据集合绘制韦恩图4...
    99+
    2022-11-13
  • 用R语言绘制函数曲线图
    函数曲线图是研究函数的重要工具。 R 中 curve() 函数可以绘制函数的图像,代码格式如下: curve(expr, from = NULL, to = NULL, n = ...
    99+
    2022-11-11
  • R语言编程学习绘制动态图实现示例
    在讨论级数时,可能需要比对前 n n n项和的变化情况,而随着 n n n的递增,通过动态图来反映这种变化会更加直观,而通过R语言绘制动态图也算是一门不那么初级的技术,所以在此添加一...
    99+
    2022-11-12
  • R语言绘制维恩图ggvenn示例详解
    目录引言1.安装2.基础用法3.图形美化4.提取交集部分并输出引言 韦恩图,Venn diagram,常用图的一种,用来展示集合之间的特异性和共同性。现在有很多在线的网站都可以绘制,...
    99+
    2022-11-13
  • R语言学习笔记之lm函数详解
    在使用lm函数做一元线性回归时,发现lm(y~x+1)和lm(y~x)的结果是一致的,一直没找到两者之间的区别,经过大神们的讨论和测试,才发现其中的差别,测试如下: -------...
    99+
    2022-11-11
  • R语言绘制双坐标图的案例详解
    之前推送了一系列关于使用ggplot2包绘制统计图形的文章,有网友询问是否可以绘制双轴的统计图形。很抱歉,Hradly在设计ggplot2包时就没有将双轴图形功能考虑进来。难道R语言...
    99+
    2023-01-07
    R语言绘制双坐标图 R语言绘制坐标图
  • R语言绘制折线图实例分析
    折线图是通过在它们之间绘制线段来连接一系列点的图。 这些点在它们的坐标(通常是x坐标)值之一中排序。 折线图通常用于识别数据中的趋势。 R语言中的plot()函数用于创建折线图。 语...
    99+
    2022-11-12
  • R语言绘制带误差线的条形图
    条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条.带误差的条形图可以通过误差线来判断显著性。 继续使用我们的汽车销售数据(公众号回复:汽车销售,可以获得该...
    99+
    2022-11-13
  • R语言绘制地图实例讲解
    setwd("C:/Users/75377/Desktop/SHEEP_ROH") png("12.png",width = 7000,height = 5500,pointsi...
    99+
    2022-11-11
  • 怎么用R语言绘制函数曲线图
    这篇文章主要讲解了“怎么用R语言绘制函数曲线图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用R语言绘制函数曲线图”吧!函数曲线图是研究函数的重要工具。R 中 curve() 函数可以绘...
    99+
    2023-06-08
  • R语言数据可视化学习之图形参数修改详解
    1、图形参数的修改par()函数 我们可以通过使用par()函数来修改图形的参数,其调用格式为par(optionname=name, optionname=name,…)。当par...
    99+
    2022-11-11
  • R语言绘制直方图实例讲解
    直方图表示被存储到范围中的变量的值的频率。 直方图类似于条形图,但不同之处在于将值分组为连续范围。 直方图中的每个柱表示该范围中存在的值的数量的高度。 R语言使用hist()函数创建...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作