公众号:尤而小屋
作者:Peter
编辑:Peter

可视化神器Plotly玩转直方图

大家好,我是Peter~

统计图形中有一个图形叫做直方图,包含一维直方图和二维直方图(也叫做密度直方图);本文先介绍一维直方图的制作,主要还是基于两种方法的实现:

  • 基于plotly_express
  • 基于plotly.graph_objects

Plotly系列

Plotly的文章会形成连载系列,前面11篇Plotly可视化文章分别是:

  • 酷炫!36张图爱上高级可视化神器Plotly_Express
  • Plotly玩转散点图
  • Plotly玩转饼图
  • Plotly玩转漏斗图
  • Plotly玩转柱状图
  • Plotly玩转气泡图
  • Plotly玩转股票图
  • Plotly玩转甘特图
  • Plotly玩转箱型图
  • Plotly玩转面积图
  • Plotly玩转小提琴图

直方图效果

引用一段百度百科对直方图的定义:

直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。

直方图的两个坐标分别是统计样本和该样本对应的某个属性的度量,以长条图(bar)的形式具体表现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpvcQNL2-1623911786590)(https://tva1.sinaimg.cn/large/008i3skNgy1grl8l6cp57g30go08enps.gif)]

模拟数据

本文中的图形的绘制主要是基于Plotly中自带的消费数据集tips,主要的字段包含:

  • 消费总金额:total_bill
  • 小费:tip
  • 付款人性别:sex
  • 付款人是否抽烟:smoker
  • 日期:day
  • 就餐时间:time,午餐还是晚餐
  • 就餐人数:size
import plotly.express as px
import numpy as np
import plotly.graph_objects as gotips = px.data.tips()
tips.head()

基于plotly_express实现

基础直方图

fig = px.histogram(tips, x="total_bill")
fig.show()

设置直方图部分元素

fig = px.histogram(tips, x="tip",title='设置直方图元素',   # 标题labels={'tip':'小费'},   # x轴label设置opacity=0.8,  # 图形透明度log_y=True,  # 取值的对数 color_discrete_sequence=['firebrick'] # 颜色选择)fig.show()

使用字段的分类值作为x轴

上面的例子中我们看到x轴的数据都是数值型的,其实我们也可以使用不同的分类作为x轴的label标签:

fig = px.histogram(  # 直方图中自动统计出现的个数tips, x="day")fig.show()

自定义区块个数bins

fig = px.histogram(tips, x="total_bill", nbins=20)  # 对应字段的个数自定义块的个数fig.show()

图形标准化方式选择

针对每个直方图有多种不同的标准化方式:

'percent', 'probability', 'density', 'probability density'
fig = px.histogram(tips, x="total_bill", histnorm='percent'  # 选择标准化方式
)fig.show()

分组直方图

根据字段的不同取值将直方图进行分组绘制;day字段有4种不同的取值:

fig = px.histogram(tips, x="total_bill", color="day")  # day属性有4种取值fig.show()

fig = px.histogram(tips, x="tip", color="sex")  # sex属性有2种取值fig.show()

不同聚合函数使用

直方图中默认使用的聚合函数是count,可以使用其他聚合函数

fig = px.histogram(tips,x="tip",  # 进行分块y="total_bill", histfunc='avg')  # 均值fig.show()

可视化直方图分布

在绘制了基础直方图之后,我们还可以在整个画布的边际绘制相关图形,辅助显示图形的分布规律,使用的参数是marginal(边际),通过其他图形来展示数据的规律:

fig = px.histogram(tips, x="tip", color="sex",  # 颜色分组marginal="rug", # 可供选择:`rug`、`box`, `violin`hover_data=tips.columns
)fig.show()

基于go.Histogram实现

基础图形

x = tips["total_bill"].tolist()# 等价于 px.histogram(tips, x="total_bill")
# 直接传入x的值
fig = go.Figure(data=[go.Histogram(x=x)])  fig.show()

图形标准化

图形标准化的方式和使用plotly_express是相同的:

import plotly.graph_objects as go
import numpy as npx = np.random.randn(1000)
fig = go.Figure(data=[go.Histogram(x=x, histnorm='probability density'  # 标准化方式选择 'percent', 'probability', 'density', 'probability density'
)])fig.show()

水平直方图

将传入的数据作为y轴的值即可绘制水平直方图:

import plotly.graph_objects as go
import numpy as npy = np.random.randn(1000)  # 生成1000个正态分布的随机数fig = go.Figure(data=[go.Histogram(y=y,  # 变成y的取值 histnorm='probability density'  # 标准化方式选择 'percent', 'probability', 'density', 'probability density'
)])fig.show()

多个直方图的覆盖模式overlay

import plotly.graph_objects as goimport numpy as npx0 = np.random.randn(300)
x1 = np.random.randn(300) + 1.5
x2 = np.random.randn(300) - 1.5fig = go.Figure()
fig.add_trace(go.Histogram(x=x0))
fig.add_trace(go.Histogram(x=x1))
fig.add_trace(go.Histogram(x=x2))# 设置覆盖模式
fig.update_layout(barmode='overlay')  # 重要参数
# 设置透明度
fig.update_traces(opacity=0.8)
fig.show()

多个直方图的堆叠模式stack

import plotly.graph_objects as go
import numpy as np# 随机生成3组数据
x0 = np.random.randn(300)
x1 = np.random.randn(300) + 1
x2 = np.random.randn(300) + 1.5fig = go.Figure()
fig.add_trace(go.Histogram(x=x0))
fig.add_trace(go.Histogram(x=x1))
fig.add_trace(go.Histogram(x=x2))# 设置堆叠模式
fig.update_layout(barmode='stack')
# 设置透明度
fig.update_traces(opacity=0.8)
fig.show()

指定聚合函数

针对同样的数据,可以在不同的轨迹中指定不同的聚合函数,下面的例子中:一个轨迹中指定为统计个数count,另一个轨迹中指定为求和sum

import plotly.graph_objects as gox = ["小明","小红","小红","小苏", "小明", "小苏"]
y = ["85","100","132","110","95","120"]fig = go.Figure()
fig.add_trace(go.Histogram(histfunc="count",   # 指定统计个数的聚合函数y=y, x=x, name="统计个数"))
fig.add_trace(go.Histogram(histfunc="sum",   # 指定求和函数y=y, x=x, name="求和"))fig.show()

累计直方图Cumulative Histogram

通过参数cumulative_enabled开启累计功能:默认表示的是个数上的累加。

x = list(range(101))fig = go.Figure(data=[go.Histogram(x=x,  # x轴数据cumulative_enabled=True
)])  # 开启累计功能fig.show()

个性化设置直方图

在下面的例子中绘制了两个直方图,使用的数据如下图中的x0和x1:

fig = go.Figure()# 直方图1
fig.add_trace(go.Histogram(x=x0,  # x轴数据histnorm='percent',  # 标准化方式name='直方图1',  # xbins=dict( # x轴起始值和块的大小sizestart=-4.0,  end=3.0,size=0.5),marker_color='#0B89B5',  # 标记颜色opacity=0.75  # 透明度
))# 直方图2
fig.add_trace(go.Histogram(x=x1,histnorm='percent',name='直方图2',xbins=dict(start=-3.0,end=4,size=0.5),marker_color='#830A73',opacity=0.75
))fig.update_layout(title=dict(text='<b>个性化</b>设置直方图', # 标题名称位置;标题中使用HTML标签x=0.5,y=0.97), xaxis_title=dict(text='取值'), # xy轴label设置yaxis_title_text='count', # 默认聚合函数countbargap=0.5, # 组间距离bargroupgap=0.3 # 组内距离
)fig.show()

可视化神器Plotly玩转直方图相关推荐

  1. 可视化神器Plotly玩转多子图绘制

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly玩转多子图绘制 大家好,我是Peter~ 很长时间没有Plotly绘图的文章,之前已经介绍如何绘制柱状图.饼图.小提琴图.桑 ...

  2. 可视化神器Plotly玩转股票图

    可视化神器Plotly玩转股票图 本文是可视化神器Plotly绘图的第7篇,讲解的是如何通过Plotly来绘制与股市相关的图形,比如基础K线图.OHLC图等. 温馨提示⚠️:**股市有风险,投资需谨慎 ...

  3. 酷炫!可视化神器Plotly玩转饼图

    酷炫!可视化神器Plotly玩转饼图 之前发表过两篇关于Plotly的文章: 入门篇:酷炫!36张图爱上高级可视化神器Plotly_Express 散点图:酷炫!可视化神器Plotly玩转散点图 Pl ...

  4. 可视化神器Plotly玩转甘特图

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly玩转甘特图 本文介绍的是一种特殊的柱状图:甘特图,虽然在实际工作中使用的几率较小,还是很有必要和兴趣来学习下,将制作过程 ...

  5. 可视化神器Plotly玩转箱形图

    可视化神器Plotly玩转箱形图 在之前的文章中介绍过如何使用Plotly绘制柱状图.饼图.散点图等,都是比较常用的可视化图表呈现方式.本文介绍的是利用Plotly绘制统计图形中的一种:箱型图. 扩展 ...

  6. 可视化神器Plotly玩转柱状图

    可视化神器Plotly玩转柱状图 本文是可视化神器Plotly绘图的第5篇:重点讲解如何利用Plotly绘制柱状图.柱状图在可视化图中是出现频率非常高的一种图表,能够很直观地展现数据的大小分布情况,在 ...

  7. 可视化神器Plotly玩转桑基图

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter呀~ 本文介绍的是利用Plotly绘制一种相对少见的可视化图形:桑基图,这个图形可以说是展现数据流动的利器. 虽然桑基图使用 ...

  8. Python 可视化神器--Plotly

    文 | 潮汐 来源:Python 技术「ID: pythonall」 学习Python是做数分析的最基础的一步,数据分析离不开数据可视化.Python第三方库中我们最常用的可视化库是 pandas,m ...

  9. 高级可视化神器Plotly快速入门

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 一文爱上高级可视化神器Plotly 数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数 ...

  10. 再见matplotlib,可视化神器 Plotly 绘制图表的太酷炫了

    数据分析离不开数据可视化.我们最常用的就是pandas,matplotlib,pyecharts 当然还有 Tableau,最近看到一篇文章介绍 plotly 制图后,我感觉写的不够简洁明了. 今天就 ...

最新文章

  1. fatfree-f3小型php框架(二)
  2. hibernate02环境的搭建
  3. boost::container_hash实现检查浮点函数
  4. springmvc(三) 参数绑定、
  5. 芯片工程师成长之路_实施工程师的成长之路 | 来自咸职厚溥17级学姐的分享
  6. 如何在php中写内容,请问如何在内容模板中写标题和内容呢
  7. django-前端上传图片190912
  8. 物联网通信之Coap 协议
  9. Linux编辑firmware的文件,Linux中request_firmware 的用法
  10. python 反爬策略_如何应对网站反爬虫策略?如何高效地爬大量数据?
  11. 团队-团队编程项目作业-开发环境搭建过程
  12. js Shadow DOM
  13. 二级公共基础知识总结笔记
  14. c语言中min函数的作用,min函数到底在哪个头文件里?
  15. python毕业设计项目源码选题(4)企业公司网站系统毕业设计毕设作品开题报告开题答辩PPT
  16. Python爬虫的多线程使用方法
  17. 学生成绩表c语言,学生成绩信息表(c语言程序)
  18. IOS应用程序启动显示白屏或黑屏
  19. 服务器运维1-failed to start LSB
  20. 合肥市直计算机知识pdf,事业单位计算机专业知识整理(全)-20210419115129.pdf-原创力文档...

热门文章

  1. Excel文本如何间隔指定字符插入分隔符
  2. 如何让 uni-app 页面中的背景图片高度和宽度自适应
  3. signature=0805b6a4f11b6551d9a746082990b689,Derived certificate based on changing identity
  4. Ubuntu18.04 安装 网易云音乐 解决 打不开的问题
  5. Git Gui界面出现中文乱码的设置方法
  6. @inherited 注解详解
  7. java.lang.NumberFormatException: For input string: “22-02-22 07:13:3
  8. 微信小程序性能优化实用建议
  9. 西安航空计算机录取分数线,2019西安航空学院录取分数线及历年专业分数线统计表【文科 理科】...
  10. 关于kinfu的配置问题,pcl_kinfu_largeScale