R语言 | 密度图

Posted 生物空间站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言 | 密度图相关的知识,希望对你有一定的参考价值。

密度图

密度图是指使用不同颜色表示样本在绘图区域中分布情况的图像。

通常情况下,会根据两个变量将平面绘图区域分为非常多的子区域,之后以不同颜色表示落在该区域上样本的数目,以此来评估样本的分布情况。

下面会介绍几种在R中实现密度图的方法。

smoothScatter

smoothScatter是R自带的一个专门用于绘制平滑颜色密度图的函数。

首先还是先介绍该函数的绘图参数。

smoothScatter(x, y = NULL, nbin = 128, bandwidth,
colramp = colorRampPalette(c("white", blues9)),
nrpoints = 100, ret.selection = FALSE,
pch = ".", cex = 1, col = "black",
transformation = function(x) x^.25,
postPlotHook = box,
xlab = NULL, ylab = NULL, xlim, ylim,
xaxs = par("xaxs"), yaxs = par("yaxs"), ...)

各参数意义:

  • x和y定义绘图的x和y轴坐标;

  • nbin定义对绘图区氛围多少个子区域;

  • bandwidth定义绘图向量的带宽,一般为默认

  • colramp定义密度图的绘图颜色;

  • nrpoints定义图像中绘制点的个数,如果需要绘制所有点,则设为Inf;

  • pch、cex和col定义图像中点的形状、大小和颜色;

  • transformation为密度尺度和颜色尺度的转换公式

  • postPlotHook定义绘图后的调整,默认是添加外框;

  • xlab和ylab为两个坐标轴的标签;

  • xlim和ylim为两个坐标轴的范围;

  • xaxs和yaxs的意义与par中函数意义相同。

绘制密度图需要两个同等元素数量并且互相对应的向量来定义x和y轴,也可以使用数据框中的两列,首先建立一个随机的绘图数据。

x <- c(rnorm(500,mean = 1,sd = 3))
y <- c(rnorm(500,mean = 2,sd = 0.8))
data <- data.frame(x,y)

接下来绘制密度图。

smoothScatter(data$x,data$y,main = "Scatterplot colored by smoothed densities",
xlab = "",ylab = "")

R语言 | 密度图

hexbin包

第二种方式是使用hexbin包,该包的主要绘图函数就是hexbin函数。

其特点是将绘图区域分成正六边形的形式,并且提供图例。

hexbin(x, y, xbins = 30, shape = 1,
xbnds = range(x), ybnds = range(y),
xlab = NULL, ylab = NULL, IDs = FALSE)

各参数意义:

  • x和y为绘图的x和y轴坐标;

  • xbins定义将数据分箱的个数;

  • shape为绘图区域的比例,数值为yheight/xwidth;

  • xbands和ybands定义x和y轴的范围;

  • xlab和ylab为x和y轴的标签;

  • IDs定义是否返回单独的每个小格子的ID。

还是使用刚才生成的随机数据进行绘图。

install.packages("hexbin")library(hexbin)
plot(hexbin(data$x,data$y,xbins = 50,xlab = "",ylab = ""),
main = "Scatterplot colored by smoothed densities")

R语言 | 密度图

⚠️hexbin函数只是生成一个用于绘图的文件,还需要结合plot函数才能生成图像。

iplot函数

第三种方式是使用IDPmics包中的iplot函数。

iplot(x, y = NULL,
pixs = 1, zmax = NULL, ztransf = function(x){x},
colramp = IDPcolorRamp, cex = par("cex"),
main = NULL, d.main = 1, cex.main = par("cex.main"),
xlab = NULL, ylab = NULL, cex.lab = 1,
legend = TRUE, d.legend = 1,
cex.axis = par("cex.axis"), nlab.xaxis = 5, nlab.yaxis = 5,
minL.axis = 3, las = 1, border = FALSE,
oma = c(5,4,1,0)+0.1, mgp = c(2,0.5,0)*cex.axis, tcl = -0.3, ...
)

各参数意义:

  • x和y定义绘图数据的x和y轴坐标,如果x为数据框或矩阵,则其前两列为x和y坐标,此时y要设置为NULL,x和y可以是数值型或因子向量;

  • pixs定义图像像素的大小,单位为mm;

  • zmax定义每个像素中可以绘制的最大数值;

  • ztransf定义数据尺度和颜色尺度的转换函数;

  • colramp定义绘图颜色;

  • cex定义图中文字的大小;

  • main、d.main和cex.main分别定义标题内容、标题和图像顶端的距离以及标题的大小;

  • xlab和ylab定义x和y轴的标签;

  • cex.lab定义标签的大小;

  • legend和d.legend定义是否显示图例和图例与图像右侧的距离;

  • cex.axis定义坐标轴上注释标签的大小;

  • nlab.xaxis和nlab.yaxis定义图像x和y轴标签的个数;

  • minL.axis定义因子变量水平的最小缩写长度;

  • las定义轴标签的方向;

  • border是否为图例中每一个单独的颜色绘制边框;

  • oma图像的外边界大小;

  • mgp定义轴标题、轴标签和轴线的距离;

  • tcl定义轴上刻度线的长度。

同样使用刚才生成的随机数据进行绘图。

install.packages("IDPmisc")library(IDPmisc)
iplot(data$x,data$y,main = "Scatterplot colored by smoothed densities",
xlab = "",ylab = "")

R语言 | 密度图

s.kde2d

第四种方法是ade4包的s.ked2d函数。

s.kde2d(dfxy, xax = 1, yax = 2, pch = 20, cpoint = 1, neig = NULL, cneig = 2,
xlim = NULL, ylim = NULL, grid = TRUE, addaxes = TRUE, cgrid = 1,
include.origin = TRUE, origin = c(0, 0), sub = "", csub = 1.25,
possub = "bottomleft", pixmap = NULL, contour = NULL,
area = NULL, add.plot = FALSE)

各参数意义:

  • dfxy,绘图的数据框,至少含有两列;

  • xax,定义哪列数据为x轴;

  • yax,定义哪列数据为y轴;

  • pch,图中点的形状;

  • cpoint,图中点的大小,类似于cex;

  • neig,是否绘制相邻图;

  • cneig,相邻图的线宽;

  • xlim、ylim,x和y轴的范围;

  • grid,是否绘制背景网格;

  • addaxes,是否绘制坐标轴;

  • cgrid,网格线的线宽;

  • include.origin,是否绘制原点;

  • origin,原点的坐标;

  • sub,图例的文字

  • csub,图例文字的大小;

  • possub,图例的位置;

  • contour,通过一个4列的数据绘制等值线;

  • area,用于绘制等值线表面的数据;

  • add.plot,是否添加到现有图像中。

绘图示例。

library(ade4)if(!adegraphicsLoaded()) {
data(rpjdl)
coa1 <- dudi.coa(rpjdl$fau, scannf = FALSE, nf = 3)
s.kde2d(coa1$li)
}

⚠️s.kde2d绘制密度图的目的与之前的3个方法不同,根据自身的需求合理选择


我就知道你在看  

以上是关于R语言 | 密度图的主要内容,如果未能解决你的问题,请参考以下文章

R语言 | 密度图

R语言绘制核密度图实战(Kernel Density Plot)

R语言ggplot2可视化密度图(density plot)改变密度图下的填充色实战

R语言ggplot2可视化:绘制堆叠的密度图(Stacked Area Chart)

R语言绘制密度提琴图

R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战