R语言绘图如何让多个图像显示于同一图中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言绘图如何让多个图像显示于同一图中相关的知识,希望对你有一定的参考价值。
将4张图分屏显示在同一图中,代码如下:
数据:
pie.sales <-c(39,200,42,15,67,276,27,66)
names(pie.sales) <- c("EUL","PES","EFA","EDD","ELDR","EPP","UNE","other")
分屏:
split.screen(c(2,2))
figure 1:
screen(1)
pie(pie.sales,radius = 0.9,main = "Ordinary chart")
figure 2:
screen(2)
pie(pie.sales,radius = 0.9,col = rainbow(8),clock = T,main = "Rainbow colours")
figure 3:
screen(3)
pie(pie.sales,radius = 0.9,clock = T,col = gray(seq(0.4,1.0,length = 8)),main = "Grey colours")
figure 4:
screen(4)
pie(pie.sales,radius = 0.9,density = 10,angle = 15 + 15*1:8,main = "The density of shading lines")
图像个数可以根据需要自定义添加。
扩展资料
R语言是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R语言是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具;完整连贯的统计分析工具;优秀的统计制图功能。
参考资料来源:百度百科-R语言
参考技术A不知道你问的是在同一图形中添加点(类似画散点图)还是要把屏幕一分为多。
添加的话,用完plot,添加点用points,添加线用lines。
简单点的应用类似:
plot(X,Y)
points(X,Y1)
这样的感觉。
一分为多的话,用split.screen。
上我自己最近写的代码做个例子:
jpeg(filename="geeseP3.jpeg") #画jpeg图
split.screen(c(1,2)) #分屏幕为左右两边
screen(1) #屏幕1预备输出
plot(X2,Y,type="p",xlab="X2",ylab="Y",main="Plotting of X2 and Y")
screen(2) #屏幕2预备输出
plot(X2,Y,type="l")
dev.off()
画出来的图大概是这个感觉:
不喜欢这个比例的话,也有命令可以调节图片长宽比例。这个略去不提。
另外推荐这个
http://wenku.baidu.com/link?url=mMnroYY14th1qiKzsFnTUVceptBVugQsrLbYFItaqMN25xftBQlMBThtyW5fsmIgkMWcWbkXyozKR85SFEb7VwDUhekqSBVDuOvskifRo7W
里面有列举了一些画图用的函数。
本回答被提问者和网友采纳 参考技术B 例子:## 数据
pie.sales <-c(39,200,42,15,67,276,27,66)
names(pie.sales) <- c("EUL","PES","EFA","EDD",
"ELDR","EPP","UNE","other")
## 分屏
split.screen(c(2,2))
## figure 1
screen(1)
pie(pie.sales,radius = 0.9,main = "Ordinary chart")
## figure 2
screen(2)
pie(pie.sales,radius = 0.9,col = rainbow(8),
clock = T,main = "Rainbow colours")
## figure 3
screen(3)
pie(pie.sales,radius = 0.9,clock = T,
col = gray(seq(0.4,1.0,length = 8)),
main = "Grey colours")
## figure 4
screen(4)
pie(pie.sales,radius = 0.9,
density = 10,angle = 15 + 15*1:8,
main = "The density of shading lines")
不懂的可以放弃R语言了。。。
如何使用R语言circlize包绘制漂亮圈图
圈图对于展示复杂的数据信息非常有用,它既可以展示不同类别的数据信息,还可以直观地展示聚焦于同一对象的多个轨迹上的数据变化,它还能够展示多个元素之间的关系。
目前大家比较熟知的是使用circos(http://circos.ca/)来进行绘图,但由于circos是基于Perl语言来进行绘图的,如果对Perl不够熟悉,小伙伴们在学习和使用时依然有些费神。如今在R中的circlize包也能实现圈图绘制功能,甚至可能更为强大和便捷。下面我们一起来了解一下吧~
circlize包是由德国癌症中心的华人博士Zuguang Gu开发的。
有兴趣的可以去看看他的Github主页:
https://github.com/jokergoo
circlize包的学习文档:
https://jokergoo.github.io/circlize_book/book/
主要分为三个部分:
第一部分主要介绍绘制圈图的基本原理与通用函数;
第二部分主要介绍针对基因组数据如何绘制圈图;
第三部分主要介绍如何绘制和弦图。
今天,先为大家介绍第一部分的学习内容。
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/0bcde1880df841329754d2a8a0b9fde2.jpg)
1. circlize包安装
首先,安装circlize包,请使用以下命令:
install.packages("circlize")
或者
devtools::install_github("jokergoo/circlize")
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/ce6fa2de68b346379bf523d6e2d24571.jpg)
2. circlize包绘图规则
2.1 坐标系的转换
绘制圈图首先要进行坐标系转换,circlize首先将数据坐标从数据坐标系转换为极坐标系,最后转换为画布坐标系(如下图)。实际上,最终的画布坐标是基本R图形系统中的普通坐标,默认情况下x范围为(-1,1),y范围为(-1,1)。需要注意的是,圈图总是在半径为1的圆内绘制(这意味着它总是一个单位圆),并且是从外到内。
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/4ffe1b9eb93a4ceabba1238b5b6e1a53.jpg)
图2.1 | 不同坐标系之间的转换
2.2 绘图规则
绘制圈图一般遵循如下步骤:初始化图形(initialize)——添加轨道(create track)——添加图形(add graphics)——添加轨道——添加图形……——重置(circos.clear)
1)初始化图形:
一般使用函数circos.initialize 进行初始化,所需数据必须包括因子变量和X值。
2)创建轨道:
使用函数circos.trackPlotRegion创建轨道(可简写为circos.track)。
3)添加图形:
在新创建的轨道上添加图形一般有三种方法:
使用circos.points, circos.lines等低级绘图参数
使用circis.trackPoints, circos.trackLines等进行绘图
在circos.trackPlotRegion中使用panel.fun函数
4)重置:
使用函数circos.clear进行重置。应该始终在每个圈图的结尾处调用circos.clear()。圈图有几个参数,只能在circos.initialize()之前设置,因此,在绘制下一个圈图之前,需要重置这些参数。
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/433c64c8aa334c0d83f2a7b082f46241.jpg)
图2.2 | 绘制圈图的步骤
2.3 扇区和轨道
圈图由扇区和轨道组成。红色圆圈是一条轨道,蓝色代表一个扇区。扇区和轨道的交点称为单元格,单元格是圈图中的基本单位,可以将其视为数据的绘图区域。
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/c755677935d94a88b5f6a6317eab247a.jpg)
图2.3 | 圈图中的扇区与轨道
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/0bcde1880df841329754d2a8a0b9fde2.jpg)
3. circlize包常用函数
3.1 常用的布局函数
circos.initialize():初始化
circos.trackPlotRegion():创建新的轨道
circos.updatePlotRegion():更新绘制的已有的单元格
circos.par():绘图参数(用法同par类似)
circos.info():打印当前绘图信息
circos.clear():重置图形参数和内部变量
通过circos.par可设置的基本图形参数:
start.degree:第一个扇区放置的起始角度(默认0)
gap.degree/gap.after:两个相邻扇区之间的间隙:(default: 1)
track.margin:绘图区域之外的空白区域:c(0.01, 0.01)
cell.padding:单元的填充:c(0.02, 1.00, 0.02, 1.00)
unit.circle.segments:控制表示曲线的线段数量:(default: 500)
track.height:轨道的默认高度:(default: 0.2)
points.overflow.warning:TRUE
canvas.xlim:画布中的范围沿x方向坐标:c(-1, 1)
canvas.ylim:画布中的范围沿y方向坐标:c(-1, 1)
clock.wise:绘图扇区的顺序,默认值TRUE指顺时针:TRUE
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/412099ea926a4f77af0e106bae6a1a1e.jpg)
图3.1 | 单元格中的区域设置
3.2 常用绘图函数
circos.points():在单元格内绘制点
circos.lines():在单元格内绘制线
circos.segments():在单元格内绘制片段
circos.rect():在单元格内绘制矩形
circos.polygon():在单元格内绘制多边形
circos.text():在单元格内添加文本
circos.axis()/circos.yaxis():在单元格内绘制坐标轴
circos.arrow():在单元格内绘制圆形箭头
circos.link():绘制单元格之间的联系(circlize 包特有)
3.3 高级绘图函数
circos.trackPoints():“循环”绘制点
circos.trackLines():“循环”绘制线
circos.trackText():“循环”绘制文本
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/ce6fa2de68b346379bf523d6e2d24571.jpg)
4. 高亮扇区和轨道
· draw.sector():绘制扇形、圆环。如果要突出显示圈图的某些部分,此函数很有用。
draw.sector()的参数主要包括圆心的位置(默认为c(0,0))、扇区的开始角度和结束角度以 及上边界或下边界的两条边(或一条边)的半径。其用法如下:
draw.sector(start.degree, end.degree, rou1) draw.sector(start.degree, end.degree, rou1, rou2, center) draw.sector(start.degree, end.degree, rou1, rou2, center, col, border, lwd, lty)
start.degree和end.degree的方向对于绘制扇区很重要。默认情况下,它是顺时针的。
draw.sector(start.degree, end.degree, clock.wise = FALSE)
示例如下:
定义边距
par(mar = c(1, 1, 1, 1))
plot(c(-1, 1), c(-1, 1), type = "n", axes = FALSE, ann = FALSE, asp = 1)
draw.sector(20, 0)
draw.sector(30, 60, rou1 = 0.8, rou2 = 0.5, clock.wise = FALSE, col = "#FF000080")
draw.sector(350, 1000, col = "#00FF0080", border = NA)
draw.sector(0, 180, rou1 = 0.25, center = c(-0.5, 0.5), border = 2, lwd = 2, lty = 2)
draw.sector(0, 360, rou1 = 0.7, rou2 = 0.6, col = "#0000FF80")
图4.1 | 使用draw.sector()高亮
factors = letters[1:8]
circos.initialize(factors, xlim = c(0, 1))
for(i in 1:3) {
circos.track(ylim = c(0, 1))
}
draw.sector(get.cell.meta.data("cell.start.degree", sector.index = "a"),
get.cell.meta.data("cell.end.degree", sector.index = "a"),
rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
col = "#FF000040")
draw.sector(0, 360,
rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
rou2 = get.cell.meta.data("cell.bottom.radius", track.index = 1),
col = "#00FF0040")
draw.sector(get.cell.meta.data("cell.start.degree", sector.index = "e"),
get.cell.meta.data("cell.end.degree", sector.index = "f"),
rou1 = get.cell.meta.data("cell.top.radius", track.index = 2),
rou2 = get.cell.meta.data("cell.bottom.radius", track.index = 3),
col = "#0000FF40")
pos = circlize(c(0.2, 0.8), c(0.2, 0.8), sector.index = "h", track.index = 2)
draw.sector(pos[1, "theta"], pos[2, "theta"], pos[1, "rou"], pos[2, "rou"],
clock.wise = TRUE, col = "#00FFFF40")
circos.clear()
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/54b6dc2f25664133a3489fe5529d92ba.jpg)
图4.2 | 使用draw.sector()高亮扇区和轨道示例
·highlight.sector():突出显示整个单元格
highlight.sector()的优点之一是它支持在突出显示的区域中添加文本。默认情况下,文本绘制在突出显示区域的中心。基本方向的位置可以通过text.vjust参数设置,可以通过数字值或字符串形式使用“ 2 inch”或“ -1.2cm”
factors = letters[1:8]
circos.initialize(factors, xlim = c(0, 1))
for(i in 1:4) {
circos.track(ylim = c(0, 1))
}
circos.info(plot = TRUE)
highlight.sector(c("a", "h"), track.index = 1, text = "a and h belong to a same group",
facing = "bending.inside", niceFacing = TRUE, text.vjust = "6mm", cex = 0.8)
highlight.sector("c", col = "#00FF0040")
highlight.sector("d", col = NA, border = "red", lwd = 2)
highlight.sector("e", col = "#0000FF40", track.index = c(2, 3))
highlight.sector(c("f", "g"), col = NA, border = "green",
lwd = 2, track.index = c(2, 3), padding = c(0.1, 0.1, 0.1, 0.1))
highlight.sector(factors, col = "#FFFF0040", track.index = 4)
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/29a4d395045d4229b8386ad3f0dca4a5.jpg)
图4.3 | 使用highlight.sector()高亮示例
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/0bcde1880df841329754d2a8a0b9fde2.jpg)
5. 利用circlize包绘图示例
下面我们拿一个例子进行绘图示例:
set.seed(1)
n = 1000
a = data.frame(factor = sample(letters[1:8], n, replace = TRUE),
x = rnorm(n), y = runif(n))
library(circlize)
circos.par("track.height"= 0.1)
circos.initialize(factors = df$factors, x = df$x)
circos.track(factors = df$factors, y = df$y,
panel.fun = function(x, y) {
circos.text(CELL_META$xcenter, CELL_META$cell.ylim[2] + uy(5,"mm"),
CELL_META$sector.index)
circos.axis(labels.cex = 0.6)
})
col = rep(c("#FF0000","#00FF00"), 4)
circos.trackPoints(df$factors, df$x, df$y, col = col, pch = 16, cex = 0.5)
circos.text(-1, 0.5,"text", sector.index = "a", track.index = 1)
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/c3f8e54087f843d1bd802559f58b76e2.jpg)
图5.1创建第一圈轨道并添加散点图
bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)
circos.trackHist(df$factors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/212e9570558f4f96ad3e824002ac3fa6.jpg)
图5.2 | 创建第二圈轨道并添加条形图
circos.track(factors = df$factors, x = df$x, y = df$y,
panel.fun = function(x, y) {
ind = sample(length(x), 10)
x2 = x[ind]
y2 = y[ind]
od = order(x2)
circos.lines(x2[od], y2[od])
})
图5.3 | 创建第三圈轨道并添加折线图
circos.update(sector.index = "d", track.index = 2,
bg.col = "#FF8080", bg.border = "black")
circos.points(x = -2:2, y = rep(0.5, 5), col = "white")
circos.text(CELL_META$xcenter, CELL_META$ycenter, "updated", col = "white")
图5.4 | 修改已绘制的扇区
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
xlim = CELL_META$xlim
ylim = CELL_META$ylim
breaks = seq(xlim[1], xlim[2], by = 0.1)
n_breaks = length(breaks)
circos.rect(breaks[-n_breaks], rep(ylim[1], n_breaks - 1),
breaks[-1], rep(ylim[2], n_breaks - 1),
col = rand_color(n_breaks), border = NA)
})
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/8077e4a353a24979b31ac446b49bfbc7.jpg)
图5.5 | 创建第四圈轨道并添加矩形热图
circos.link("a", 0, "b", 0, h = 0.4)
circos.link("c", c(-0.5, 0.5), "d", c(-0.5,0.5), col = "red",
border = "blue", h = 0.2)
circos.link("e", 0, "g", c(-1,1), col = "green", border = "black", lwd = 2, lty = 2)
circos.clear()
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/3969670b7cc4474292a7ca0c89e33ed6.jpg)
图5.6 | 添加单元格之间的链接
![如何使用R语言circlize包绘制漂亮圈图(一)](https://image.cha138.com/20210418/5168545f67f1485081d0dc4e5fa13fb2.jpg)
这一期circlize包的基本用法先介绍到这里,如大家有使用问题,欢迎留言提问,也可以参考阅读circlize官方教程!或,让老师手把手教你更多内容!
参考文献:
1. circlize官方教程:
https://jokergoo.github.io/circlize_book/book/
猜你想看
#END#
听说点了在看的人,都发了高分文章
以上是关于R语言绘图如何让多个图像显示于同一图中的主要内容,如果未能解决你的问题,请参考以下文章