密度图的密度估计_不同类型的二维密度图小教程
R相关小教程链接:
用R构建气泡图案例小教程
【小教程】散点图、饼图怎么在我的文章中完美展示小教程
热图在论文发表中完美呈现小教程
R与密度、函数、变量的微妙关系
北京市计算中心医用数据库建设解决方案
更多内容,请关注“生信会议”公众号
Different types of 2d density chart. Source
Density 2d
2d密度图显示了两个数值变量之间的关系。一个在X轴上,另一个在Y轴上,就像散点图一样。然后,在二维空间的特定区域内观察到的数量被计数并由颜色梯度表示。二维密度图有几种类型:
01
Definition
Definition
此页面专门用于一组图形,允许研究两个定量变量的组合分布。这些图形基本上是众所周知的密度图和直方图的扩展。
对于每个变化,全局概念是相同的。一个变量在X轴上表示,另一个变量在Y轴上表示,就像散射图(1)一样)。然后,计算二维空间特定区域内的观测数,并用颜色梯度表示。形状可以变化:
· 六边形经常被使用,导致一个六边形图表(2)
· 正方形制作2d直方图(3)
· 计算核密度估计也可以得到2d密度图(5)或等高线图(6)
以下是这些不同可能性的概述
# Librariesimport numpy as npimport matplotlib.pyplot as pltfrom scipy.stats import kde
# Create data: 200 points
data = np.random.multivariate_normal([0, 0], [[1, 0.5], [0.5, 3]], 200)
x, y = data.T
# Create a figure with 6 plot areas
fig, axes = plt.subplots(ncols=6, nrows=1, figsize=(21, 5))
# Everything starts with a Scatterplot
axes[0].set_title('Scatterplot')
axes[0].plot(x, y, 'ko')# Thus we can cut the plotting window in several hexbins
nbins = 20
axes[1].set_title('Hexbin')
axes[1].hexbin(x, y, gridsize=nbins, cmap=plt.cm.BuGn_r)
# 2D Histogram
axes[2].set_title('2D Histogram')
axes[2].hist2d(x, y, bins=nbins, cmap=plt.cm.BuGn_r)
# Evaluate a gaussian kde on a regular grid of nbins x nbins over data extents
k = kde.gaussian_kde(data.T)
xi, yi = np.mgrid[x.min():x.max():nbins*1j, y.min():y.max():nbins*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))
# plot a density
axes[3].set_title('Calculate Gaussian KDE')
axes[3].pcolormesh(xi, yi, zi.reshape(xi.shape), cmap=plt.cm.BuGn_r)
# add shading
axes[4].set_title('2D Density with shading')
axes[4].pcolormesh(xi, yi, zi.reshape(xi.shape), shading='gouraud', cmap=plt.cm.BuGn_r)
# contour
axes[5].set_title('Contour')
axes[5].pcolormesh(xi, yi, zi.reshape(xi.shape), shading='gouraud', cmap=plt.cm.BuGn_r)
axes[5].contour(xi, yi, zi.reshape(xi.shape) )# save
plt.savefig("IMG/density2d.png")
02
What for
What for
二维分布是非常有用的,以避免过度绘制在一个散射图。这里有一个例子,显示了超图散点图和2d密度图之间的区别。在第二种情况下,出现了一个非常明显的隐藏模式:
# Librarieslibrary(tidyverse)library(hrbrthemes)library(viridis)library(patchwork)
# Dataset:
a
b
c
data
p1 % ggplot( aes(x=x, y=y)) + geom_point(color="#69b3a2", size=2) + theme_ipsum() + theme(
legend.position="none"
)
p2
legend.position='none'
)
p1 + p2
03
Variation
Variation
2d发行是一种罕见的值得使用3d的情况。
可以在网格中转换散点图信息,并计算网格每个位置上的数据点的数量。然后,不是用渐变颜色来表示这个数字,表面图使用3d来表示密度比其他的要高。
在这种情况下,3组的位置变得明显:
library(plotly)library(MASS)
# Compute kde2d
kd
# Plot with plotlyplot_ly(x = kd$x, y = kd$y, z = kd$z) %>% add_surface()
03
Variation
Variation
2d发行是一种罕见的值得使用3d的情况。
可以在网格中转换散点图信息,并计算网格每个位置上的数据点的数量。然后,不是用渐变颜色来表示这个数字,表面图使用3d来表示密度比其他的要高。
在这种情况下,3组的位置变得明显:
library(plotly)library(MASS)
# Compute kde2d
kd
# Plot with plotlyplot_ly(x = kd$x, y = kd$y, z = kd$z) %>% add_surface()
一、
2D HISTOGRAM WITH GEOM_BIN2D()
这是经典直方图的二维版本。地块区域被分割成许多小正方形,每个正方形中的点数由其颜色表示。
2d density plot with ggplot2
这篇文章介绍了2d密度图的概念,并解释了如何使用R和ggplot2来构建它。考虑了二维直方图、hexbin图、二维分布等。
The issue with geom_point()
如果你有大量的点,一个2d密度图对于研究两个数值变量之间的关系是有用的。
为了避免重叠(就像旁边的散点图一样),它将地块区域划分为大量的小片段,并表示该片段中的点数。
二维密度图有几种类型。每个都有自己的ggplot2功能。这篇文章描述了所有这些。
# Librarylibrary(tidyverse) # Dataa
2d Histogramwith geom_bin2d()
对于2d直方图,plot area被划分为多个正方形。(这是一个经典的直方图的2d版本)。使用geom_bin_2d()函数调用它。此函数提供了一个bin参数,用于控制要显示的bin的数量。
注意:如果您不相信垃圾箱选项的重要性,请阅读本文。
# 2d histogram with default optionggplot(data, aes(x=x, y=y) ) + geom_bin2d() + theme_bw() # Bin size control + color paletteggplot(data, aes(x=x, y=y) ) + geom_bin2d(bins = 70) + scale_fill_continuous(type = "viridis") + theme_bw()
Hexbin chart with geom_hex()
另一种方法是将地块划分为多个六边形:因此称为hexbin图,使用geom_hex()函数制作。
这个函数还提供了bin参数,用于控制每个轴的除数。
# Hexbin chart with default optionggplot(data, aes(x=x, y=y) ) + geom_hex() + theme_bw() # Bin size control + color paletteggplot(data, aes(x=x, y=y) ) + geom_hex(bins = 70) + scale_fill_continuous(type = "viridis") + theme_bw()
2d distribution with geom_density_2d or stat_density_2d
由于可以绘制密度图而不是柱状图,因此可以计算2d密度并表示它。ggplot2提供了几种可能性:您可以显示分布或区域的轮廓线,或使用光栅函数:
# Show the contour onlyggplot(data, aes(x=x, y=y) ) + geom_density_2d() # Show the area onlyggplot(data, aes(x=x, y=y) ) + stat_density_2d(aes(fill = ..level..), geom = "polygon") # Area + contourggplot(data, aes(x=x, y=y) ) + stat_density_2d(aes(fill = ..level..), geom = "polygon", colour="white") # Using rasterggplot(data, aes(x=x, y=y) ) + stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) + theme( legend.position='none' )
Customize the color palette
无论你使用的是2d柱状图、hexbin图还是2d分布,你都可以并且应该自定义图表的颜色。这里有一个使用scale_fill_distiller()函数的建议。您可以在图库的ggplot2部分中看到其他方法。
# Call the palette with a numberggplot(data, aes(x=x, y=y) ) + stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) + scale_fill_distiller(palette=4, direction=-1) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) + theme( legend.position='none' ) # The direction argument allows to reverse the paletteggplot(data, aes(x=x, y=y) ) + stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) + scale_fill_distiller(palette=4, direction=1) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) + theme( legend.position='none' ) # You can also call the palette using a name.ggplot(data, aes(x=x, y=y) ) + stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) + scale_fill_distiller(palette= "Spectral", direction=1) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) + theme( legend.position='none' )
二、
OTHER EXAMPLES
Hexbin chart with the hexbin package
这篇文章解释了如何使用hexbin包用R构建hexbin图。Hexbin图是一个2d密度图,允许可视化两个数值变量之间的关系。
在显示大型数据集时,散点图很难解释,因为点不可避免地会覆盖图,而且可以??不能单独区分。
bin可以被看作是一个二维的直方图,其中容器的阴影代替了条形的高度。这种技术是在hexbin包中计算的。
这个例子已经由Myles Harrison发表在r -blogger上。
# Packageslibrary(hexbin)library(RColorBrewer) # Create datax
Hexbin chart and scatterplot with ggplot2
这篇文章解释了如何使用R和ggplot2构建一个顶部带有散点图的hexbin图。它是对使用ggplot2的2d密度图页面的一个补充。
此图扩展了使用ggplot2文档的2d密度图中描述的概念。它简单地说明了可以在二维密度图的顶部添加散点图。
# librarylibrary(ggplot2) # datasample_data
培训最新安排:
2020.10.19-23实用生物信息学研讨班
2020.10.27-30生物医学公共数据深度挖掘及应用培训班
2020.11.03-06转录组学专题实操班
2020.11.11-13生物分子互作常用软件实操班
2020.11.18-20微生物组学数据分析与挖掘专题培训班
2020.11.24-27生物信息学Python语言实操班
2020.11.25-27 10X Genomics单细胞转录组测序及多组学数据挖掘技术培训班
2020.12.02-04基因组关联分析技术应用培训班
2020.12-09-11生命科学的数据可视化与科研作图—实用工具与技巧实操班
2020.12.16-18多组学数据分析及挖掘培训班
2020.12.21-23计算机辅助设计—分子模拟与蛋白互作研讨班
2020.12.28-31数据分析与R语言制图实操班
【咨询请联系】
QQ号:2814500767
邮箱:bcc-sxpx@bcc.ac.cn
徐老师 010-59341786,15801436028(微信同号)
员老师 010-59341773,18701529461(微信同号)
技术服务
数据库构建
可提10X空间转录组
10X单细胞转录组
有参(无参)转录组
16S
基因关联分析
蛋白分子对接
同源建模
分子动力学
网络药理学
虚拟筛选等等相关技术服务、以及对应的培训学习
相关业务咨询
王老师:15001065280
邮箱:wangxf@bcc.ac.cn
密度图的密度估计_不同类型的二维密度图小教程相关推荐
- python中序列类型是二维元素向量吗_序列类型是二维元素向量,元素之间存在先后关系,通过序号访问。...
[填空题]MapReduce 计算模式中, Map (映射)的主要任务是:负责输入数据的 . . ,输出 . [多选题]大数据的特征包括( ). [判断题]中断服务过程中如果允许中断嵌套,则优先级高的 ...
- python三维图切片提取_详解Python二维数组与三维数组切片的方法
如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度: 如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间 ...
- R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图、2D密度估计、MASS包中的kde2d函数实现2D密度估计、geom_density2d函数可视化二维密度图
R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图.2D密度估计.MASS包中的kde2d函数实现2D密度估计.geom_density2d函数可视化二维密度图 目录
- FigDraw 25. SCI文章中绘图二维密度图及组合图
点击关注,桓峰基因 桓峰基因公众号推出基于R语言绘图教程并配有视频在线教程,目前整理出来的教程目录如下: FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色 FigDraw 2. SCI ...
- R语言绘制二维密度图
R语言绘制二维密度图 二维密度图显示了两个数值变量之间的关系,一个在x轴上表示,另一个在Y轴上表示,与散点图类似,然后计算二维空间中特定区域内的观测数,并用颜色梯度表示.二维密度图有几种类型,以下主要 ...
- python 密度图_Python-Matplotlib做二维密度分布图
之前一直想尝试着用Matplotlib绘制计算结果中的二维密度分布图,这样即省去了许多数据处理的麻烦,也方便直接在Linux系统中观察计算的结果.但对Numpy和Maltplotlib的熟练程度还不够 ...
- R语言ggplot2可视化2d密度图:可视化二维密度图并将两个二维密度图重叠起来、Overlay two ggplot2 stat_density2d plots
R语言ggplot2可视化2D密度图:可视化二维密度图并将两个二维密度图重叠起来.Overlay two ggplot2 stat_density2d plots 目录
- sip 时序图_时序图怎么看_教你如何看懂时序图 - 什么是时序图_时序图怎么看_教你如何看懂时序图...
时序图怎么看_教你如何看懂时序图 操作时序永远使用是任何一片IC芯片的最主要的内容.一个芯片的所有使用细节都会在它的官方器件手册上包含.所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上 ...
- 如何使用MATLAB绘制不同类型的二维图形
如何使用MATLAB绘制不同类型的二维图形 听语音 | 浏览:360 | 更新:2014-11-30 18:10 | 标签:matlab 1 2 3 4 5 分步阅读 如何用MATLAB绘制各种二维图 ...
最新文章
- 什么是数据库视图(view),视图(view)优缺点是什么?
- 前端javascript实现二进制读写操作
- CentOS中使用Docker安装Jenkins
- 神仙尬聊!哲学马云VS科技马斯克:生活就该每周工作12小时,开特斯拉玩遍三千城市...
- 团队-中国象棋-最终程序
- mysql 8.0 yum_CentOS8 安装 MySQL8.0(yum)
- gevent开发http服务器与tcp服务器(WSGIServer、StreamServer)
- 从中心到边缘,IoT正变为互联网之上的一张大网
- 基于Spring Security的认证授权_连接数据库认证_Spring Security OAuth2.0认证授权---springcloud工作笔记128
- Hessian HTTP POST访问时,Nginx返回411问题
- 新机发布会用鸿蒙吗,鸿蒙操作系统及华为全场景新品发布会即将到来,硬件生态发展有望迎来加速度...
- Angular移动工具集要让Web应用有原生的感觉
- Docker教程小白实操入门(9)--基于export导出容器与基于import导入一个镜像
- 算法48---原子的数量【栈】
- Uva 12563 - Jin Ge Jin Qu(01背包)
- 软件工程导论——第三章——需求分析
- prometheus安装使用
- python编码及初体验
- android 禁用触摸屏,animation时禁用所有触摸屏交互
- 软件开发团队必备管理工具
热门文章
- SQL Server 性能优化之——系统化方法提高性能
- 软件项目经理应该具备的心态
- Android应用开发:CardView的使用及兼容
- 新年快乐轮播特效html,基于owl-carousel的卡片水平轮播展示特效
- Java bitset转string_将java BitSet保存到DB
- css 相同的css属性_CSS中的order属性
- java如何遍历combobox_如何通过COMBOBOX设置Java中的框架标题?
- java分数表示_表示Java分数的最佳方法?
- vue-video-player修改src就会报错_4、修改入口点代码
- python定义变量名的时候、需要注意问题_python中将函数赋值给变量时需要注意的一些问题...