【R作图】lattice包,画多个分布柱形图,hist图纵轴转换为百分比

2023-10-29

一开始用lattice包,感觉在多元数据的可视化方面,确实做得非常好。各种函数,可以实现任何想要实现的展示。

barchart(y ~ x) y对x的直方图
bwplot(y ~ x) 盒形图
densityplot(~ x) 密度函数图
dotplot(y ~ x) Cleveland点图(逐行逐列累加图)
histogram(~ x) x的频率直方图
qqmath(~ x) x的关于某理论分布的分位数-分位数图
stripplot(y ~ x) 一维图,x必须是数值型,y可以是因子
qq(y ~ x) 比较两个分布的分位数,x必须是数值型,y可以是数值型,字符型,或者因子,但是必须有两个"水平"
xyplot(y ~ x) 二元图(有许多功能)
levelplot(z ~ x*y)
contourplot(z ~ x*y)
在x,y坐标点的z值的彩色等值线图(x,y和z等长)
cloud(z ~ x*y) 3-D透视图(点)
wireframe(z ~ x*y) 同上(面)
splom(~ x) 二维图矩阵
parallel(~ x) 平行坐标图

下面详细介绍下xyplot,xyplot相当于plot,不过可以画多个子图。

一.不过如果想要在每个子图里展示几种点或线,就要想想办法了。

1)这是一个利用公式关系的方法:Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width能在一个子图中画出

Sepal.Length ~ Petal.Length,Sepal.Width ~ Petal.Length,Sepal.Length ~ Petal.Width,Sepal.Width ~ Petal.Width四种关系

*代码:

library(lattice)

require(stats)

xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species,
data = iris, scales = "free", layout = c(2, 2),
auto.key = list(x = .6, y = .7, corner = c(0, 0)))

2)下面是另一种方法,利用groups参数:

*代码:

xyplot(freq~abun |KO ,groups=country,data =zz, type="o", layout = c(4, 6),xlab="Abundance (log10)",ylab="Frequency",scales="free")

 

不过我想要画hist分布图,所以尝试了几种不同方法:

1)barchart:可惜柱子的透明度无法调节

*代码:

barchart(freq~abun |KO ,groups=country,data =zz,stack =T,strip=T, layout = c(2, 2),xlab="Abundance (log10)",ylab="Frequency",scales="free",col=rainbow(2,alpha=0.5),box.ratio =100,horizontal=F)

2)想用xyplot 函数,把type改成“h”柱形,但是 lwd 这个参数没法每个子图不一样,lend参数无效 。

*代码:

xyplot(freq~abun |KO ,groups=country,data =zz, type="h", lwd = 10, lend =2, layout = c(4, 6),xlab="Abundance (log10)",ylab="Frequency",scales="free",col=rainbow(2,alpha=0.5))

3)经过一番研究,用histogram函以及函数中的panel(子图中加函数)可以实现,但是发觉xlim无法各个子图自己调整,最后无奈选择最原始的方法。

*代码:

histogram(~abun |KO ,data=zz , layout = c(4, 6),xlab="Abundance (log10)",ylab="Frequency",scales="free",col=rainbow(2,alpha=0.5)[1],
panel = function(x, ...) {
panel.histogram(x[1:100],breaks=NULL,type="count",col = rainbow(2,alpha=0.5)[1])
panel.histogram(x[101:160],breaks=NULL,type="count",col = rainbow(2,alpha=0.5)[2])
}
)

4)最原始的方法:

*代码:

par(mfrow=c(6,4),mar=c(2.1,2.1,0.1,0.1))
for (i in 1:length(id))
{
tmp=log10(as.numeric(data[id[i],2:161]))
a=hist(tmp,breaks=10,plot=F)
b=hist(tmp[1:100],breaks=a$breaks,plot=F)
c=hist(tmp[101:160],breaks=a$breaks,plot=F)
if((max(b$count)/100)>(max(c$count)/60)){
hist(tmp[1:100],breaks=a$breaks,col=rainbow(2,alpha=0.5)[1],xlab="",ylab="",main="");
e=hist(tmp[101:160],breaks=a$breaks,plot=F)
e$counts = e$counts*100/sum(e$counts)
plot(e,add=T,col=rainbow(2,alpha=0.5)[2],xlab="",ylab="",main="")
}else{
e=hist(tmp[101:160],breaks=a$breaks,plot=F)
e$counts = e$counts*100/sum(e$counts)
plot(e,col=rainbow(2,alpha=0.5)[2],xlab="",ylab="",main="",border=0)
hist(tmp[1:100],breaks=a$breaks,add=T,col=rainbow(2,alpha=0.5)[1],xlab="",ylab="",main="");
plot(e,add=T,col=rainbow(2,alpha=0.5)[2],xlab="",ylab="",main="")
}
}

最后终于大功告成,里面还有很多地方值得仔细研究。

例如:

  i.我两组样品的数量不一样,但是我想在一个hist图中比较,怎么办?hist纵轴百分比显示!!!

e=hist(tmp[101:160],breaks=a$breaks,plot=F)#先hist存到变量中
e$counts = e$counts*100/sum(e$counts) #将counts转换成百分比
plot(e,add=T,col=rainbow(2,alpha=0.5)[2],xlab="",ylab="",main="")#再画图

  ii.我画两个具有一定透明度的hist,发觉画图先后顺序对重叠部分的颜色有影响,例如我先画红色再画蓝色vs.先画蓝色再画红色,结果就不一样了。

但是我又需要让x轴和y轴依据最大的图来确定。

所以我先根据所有数据来取breaks,保持两个hist的break一致,这样x轴问题就解决了;

然后判断哪个hist的y值最大,那么我先根据最大的那个画一个空白的hist,y轴问题解决;

然后再按照先红后蓝的顺序画上两个hist。

转载于:https://www.cnblogs.com/xianghang123/p/3625687.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【R作图】lattice包,画多个分布柱形图,hist图纵轴转换为百分比 的相关文章

  • Navicat for MySQL客户端启动报missing required library libmysq_e.dll126 错误

    Navicat for MySQL客户端启动报missing required library libmysq e dll126 错误 是因为缺少libmysq e dll 文件所致 下载libmysq e dll 文件拷贝到到Navica
  • 论文R语言复现

    高斯混合概率在众多领域都有重要应用 依据已知观测数据估计高斯模型中未知参数就显得尤为重要 由于观测值具体来自于高斯分布的哪个分模型是未知的 那么利用传统的极大似然 MLE 方法进行参数估计就变得十分困难 引入 EM 算法 该方法通过构造分布
  • R语言描述性统计

    使用Hmisc这个包 只需要调用 my data read csv test csv Hmisc describe my data 可以打印出各个变量的均值方差等信息
  • R语言 数据处理(一)

    数据合并 提取及降维处理 install packages dplyr 数据处理包dplyr library dplyr name1 lt c Bob Mary Jane Kim name2 lt c Bob Mary Kim Jane w
  • 使用R语言的names函数为DataFrame数据中的所有列进行重命名

    使用R语言的names函数为DataFrame数据中的所有列进行重命名 在R语言中 DataFrame是一种常用的数据结构 用于存储和处理表格型数据 有时候 我们需要为DataFrame中的列重新命名 以便更好地理解和处理数据 这时可以使用
  • R语言的Rattle可视化BI数据挖掘分析工具

    Rattle介绍 Rattle是一个免费的开源数据挖掘工具包 使用 Gnome 图形界面以统计语言 R编写 它在GNU Linux Macintosh OS X和MS Windows下运行 Rattle正在澳大利亚和国际上用于商业 政府 研
  • R语言与机器学习中的回归方法学习笔记

    来源 http blog sina com cn s blog 62b37bfe0101hom5 html key word lars rpart randomForest cp svm data diabetes prune boosti
  • 如何用R分析CNKI文献关键词词频?

    疑惑 如何用VOSviewer分析CNKI数据 一文发布后 有同学问我 王老师 我有个问题 我用cnki导出关键词后 想统计关键词的词频 我应该用什么样的工具 如果不利用citespace和python 做出excel那种的统计表格 该怎么
  • 1.R语言基础知识

    目录 一 R语言的介绍 R语言的下载与按照 Rstudio R包的安装 工作空间管理 基本运算 二 R的数据结构 1 数据类型 2 数据类型的转换和判断 3 数据结构 三 导入 导出数据 获取内置数据集 获取其他格式的数据 四 数据框的常用
  • R语言基础——缺失数据

    R语言基础 缺失数据 缺失数据的分类 统计学家通常将缺失数据分为三类 它们都用概率术语进行描述 但思想都非常直观 我们将用sleep研究中对做梦时长的测量 有12个动物有缺失值 来依次阐述三种类型 1 完全随机缺失 若某变量的缺失数据与其他
  • R语言应用序列模式挖掘揭示客户购买行为:深度学习与机器学习的视角

    目录 序列模式挖掘 一个简介 使用R进行序列模式挖掘 应用深度学习和机器学习改善购买行为预测
  • R语言【数据集的导入导出】

    目录 一 从键盘输入数据 二 函数方法读取 1 读取数据文件 2 从屏幕读取数据 1 scan 2 readline 3 读取固定宽度数据文件 三 读取csv文件 四 读取表格数据文件 五 从网络中读取表格或者CSV数据文件 一 从键盘输入
  • 使用R语言构建泊松回归模型

    使用R语言构建泊松回归模型 泊松回归是一种广泛应用于计数数据分析的回归模型 它是基于泊松分布的概率模型 用于描述事件在一定时间或空间范围内发生的次数 在本文中 我们将学习如何使用R语言构建泊松回归模型 并提供相应的源代码示例 1 数据准备
  • Class 06 - 良好的编码习惯(保持代码的可读性)

    Class 06 良好的编码习惯 保持代码的可读性 保持代码的可读性 编码风格 命名的注意事项 文件名 对象名称 语法 运算符 逗号 中括号和小括号 大括号 代码缩进 代码的长度 赋值 注释 调试报错 保持代码的可读性 在编写 R语言 或任
  • r如何让新增加的列出现在第一列 r如何调整新增加的列的位置

    https www cnblogs com liujiaxin2018 p 16211983 html 1 任意位置插入列 复制代码 gt a lt letters 1 5 gt b lt LETTERS 1 5 gt c lt sampl
  • 统计建模与r软件课后习题五 5.1~5.11题

    第五章 假设检验 问题导向 由正常男子血小板计数均值这句话 容易判断属于对均值进行检验的问题 H0 与正常男子无差异等于225 H1 与正常男子有差异 不等于225 x c 220 188 162 230 145 160 238 188 2
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • 不同kNN模型在R语言中的比较

    不同kNN模型在R语言中的比较 k近邻 k Nearest Neighbors 简称kNN 是一种常见的机器学习算法 被广泛用于分类和回归问题 它基于一个简单的假设 与某个样本集中距离最近的k个样本具有相似的特征和标签 本文将探讨在R语言中
  • R语言采集获取58商铺出租转让信息

    前两篇文章给我一个朋友分析出店铺商品以及地址房源信息 后来去看了下店铺房租有点贵 还是毛坯房 要自己装修 本着节约成本的原则 熬了个通宵 给他采集了一些转租商铺数据 因为数据比较多 过于先进不方便展示 我就将我爬虫程序的模版展示给大家观看
  • R语言——基本操作(二)

    目录 一 矩阵与数组 二 列表 三 数据框 四 因子 五 缺失数据 六 字符串 七 日期和时间 参考 一 矩阵与数组 matrix 创建矩阵 nrow 和 ncol 可以省略 但其值必须满足分配条件 否则会报错 只写一个值则自动分配 默认按

随机推荐