一开始用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。

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

  1. 使用R的networkD3包画可交互的网络图

    d3network包code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs & ...

  2. R语言diagram包画订单状态流图

    代码如下: library("diagram") #a <- read.table(file="clipboard",header=TRUE) write ...

  3. R语言 ggplot2包

    R语言  ggplot2包的学习   分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...

  4. R语言常用包汇总

    转载于:https://blog.csdn.net/sinat_26917383/article/details/50651464?locationNum=2&fps=1 一.一些函数包大汇总 ...

  5. 安装R语言扩展包vegan

    这周的作业我开始得好迟啊...然而还是要努力做啊... ××××××××××××××我是萌萌哒分割线×××××××××××××××××××××××××××××××××××× 首先,百度进入官方页面,看 ...

  6. R语言-Knitr包的详细使用说明

    R语言-Knitr包的详细使用说明 by 扬眉剑 来自数盟[总舵] 群:321311420 1.相关资料 1:自动化报告-谢益辉 https://github.com/yihui/r-ninja/bl ...

  7. 每R一点:各种画地图,全是知识点,90%人不知道!(转)

    R语言绘制地图,在数据分析中经常能够用到,并且会达到非常好的展示效果,本节以例子形式,介绍如何使用R语言工具,画出理想的地图. 本节例子在 R version 2.15.3版本下运行顺畅,其他版本待定 ...

  8. R+NLP︱text2vec包——四类文本挖掘相似性指标 RWMD、cosine、Jaccard 、Euclidean (三,相似距离)

    要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 在之前的开篇提到了text2vec ...

  9. R语言-神经网络包RSNNS

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

随机推荐

  1. Python contains

    一.__contains__ 判断字符串中是否包含相应的字符.

  2. 【Java】 剑指offer(28) 对称的二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它 ...

  3. 【Java】 剑指offer(68) 树中两个结点的最低公共祖先

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个树结点,求它们的最低公共祖先. 思路 该题首先要和面试 ...

  4. 汇编之 eax, ebx, ecx, edx, esi, edi, ebp, esp??

    一般寄存器:AX.BX.CX.DXAX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 索引暂存器:SI.DISI:来源索引暂存器,DI:目的索引暂存器 堆叠.基底暂存器:SP.BP ...

  5. python使用 requirements.txt 管理所需的包

    使用 requirements.txt 管理所需的包 2019/01/28 作者 若要与其他人共享项目.使用生成系统,或打算将项目复制到需要在其中还原环境的其他任何位置,必须指定项目需要的外部包. 建 ...

  6. macos 下通过sublime text 3 + gosublime+sublimegdb 开发注意事项

    1.macos系统10.13.4下 安装gdb8.0可以正常调试,而gdb8.1不能正常调试,需要跳过这个坑 2.需要对gdb 8.0进行软件签名 3.通过gosublime 运行(cmd+b),添加 ...

  7. 【Java并发核心四】Executor 与 ThreadPoolExecutor

    Executor 和 ThreadPoolExecutor 实现的是线程池,主要作用是支持高并发的访问处理. Executor 是一个接口,与线程池有关的大部分类都实现了此接口. ExecutorSe ...

  8. [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]

    这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...

  9. 蓝牙扫描工具btscanner修复暴力扫描模式

    蓝牙扫描工具btscanner修复暴力扫描模式   在btscanner 2.1-5版本中,当用户按下快捷键b,执行暴力扫描模式,会出现程序奔溃问题.该问题现在已经修复.用户只需要更新系统,将btsc ...

  10. BZOJ.4555.[HEOI2016&TJOI2016]求和(NTT 斯特林数)

    题目链接 \(Description\) 求\[\sum_{i=0}^n\sum_{j=0}^iS(i,j)\times 2^j\times j!\mod 998244353\] 其中\(S(i,j) ...