python画图|hist()函数深层体验

【1】引言

前述学习已经掌握hist()函数的基本运用技巧,可通过下述链接直达:

python画图|hist()函数画直方图初探-优快云博客

 python画图|hist()函数画直方图进阶-优快云博客

我们已经理解hist()函数本质上画的是概率分布图,相关知识属于数理统计范畴,日常运用较多。为进一步实现运用自如,我们有必要继续探索。

【2】官网教程

官网实际上进一步给出了教程,点击下方链接直达:

https://matplotlib.org/stable/gallery/statistics/histogram_normalization.html#sphx-glr-gallery-statistics-histogram-normalization-py

这个链接指向的内容比较丰富,我们需要分几次才能学习完,为此我们耐心开始学习。

【3】代码解读

首先对第一个代码示例进行解读。

先引入动画和计算模块:

import matplotlib.pyplot as plt  #引入画图模块
import numpy as np #引入计算模块

然后定义变量:

rng = np.random.default_rng(19680801) #定义数据发生器,方便定义array数组

xdata = np.array([1.2, 2.3, 3.3, 3.1, 1.7, 3.4, 2.1, 1.25, 1.3]) #定义自变量
xbins = np.array([1, 2, 3, 5]) #定义画图区间

之后定义了一个画图风格(这个定义可以随时灵活设置):

style = {'facecolor': 'none', 'edgecolor': 'C0', 'linewidth': 3} #定义画图风格,

之后定义画图并且画了两种图:

fig, ax = plt.subplots() #定义要画图
ax.hist(xdata, bins=xbins, **style) #画hist()图,画图的概率对象是xdata,直方图的边缘从xbins数组中取值,画图风格调用前述定义的style

# plot the xdata locations on the x axis:
ax.plot(xdata, 0*xdata, 'd') #用plot来画自变量xdata以增强对比

最后输出图形:

ax.set_ylabel('Number per bin') #设置Y轴标签
ax.set_xlabel('x bins (dx=1.0)') #设置X轴标签
plt.show() #输出图形

运行代码后的图形为:

图1

此时的完整代码为:

import matplotlib.pyplot as plt  #引入画图模块
import numpy as np #引入计算模块

rng = np.random.default_rng(19680801) #定义数据发生器,方便定义array数组

xdata = np.array([1.2, 2.3, 3.3, 3.1, 1.7, 3.4, 2.1, 1.25, 1.3]) #定义自变量
xbins = np.array([1, 2, 3, 5]) #定义画图区间

# changing the style of the histogram bars just to make it
# very clear where the boundaries of the bins are:
style = {'facecolor': 'none', 'edgecolor': 'C0', 'linewidth': 3} #定义画图风格,

fig, ax = plt.subplots() #定义要画图
ax.hist(xdata, bins=xbins, **style) #画hist()图,画图的概率对象是xdata,直方图的边缘从xbins数组中取值,画图风格调用前述定义的style

# plot the xdata locations on the x axis:
ax.plot(xdata, 0*xdata, 'd') #用plot来画自变量xdata以增强对比
ax.set_ylabel('Number per bin') #设置Y轴标签
ax.set_xlabel('x bins (dx=1.0)') #设置X轴标签
plt.show() #输出图形

【4】代码修改

经过观察发现,区间[2,3]之间的数据较少,代码概率相对较低,为此增加一些自变量数据:

xdata = np.array([1.2, 2.3, 3.3, 3.1, 1.7, 3.4, 2.1, 1.25, 1.3,2.3,2.6,2.8]) #定义自变量
xbins = np.array([1, 2, 3, 5]) #定义画图区间 

 运行代码后的输出图形为:

图2

显然,中间部分[2,3]区间内的数据增占比大了。

进一步观察也会发现,直方图的高度实际上是该区间内出现数据的个数。

为此,我们继续尝试改写代码,让输出结果变成概率密度。

【5】概率密度density

我们尝试重新书写hist()函数,让density参数发挥作用:

ax.hist(xdata, bins=xbins, **style,density=True)

此时运行代码的输出结果为:

图3

图3输出结果已经是概率密度的形式。

【6】总结

学习了hist()函数的高阶运用技巧,理解了density参数具有输出概率密度的功能。

好的,关于您的问题,我可以回答您的第二个问题,并提供一些有关您第一个问题的信息。 关于Python画图函数大全,以下是一些常用的Python画图函数及其用途: 1. matplotlib.pyplot.plot():绘制线条图 2. matplotlib.pyplot.scatter():绘制散点图 3. matplotlib.pyplot.bar():绘制柱状图 4. matplotlib.pyplot.hist():绘制直方图 5. matplotlib.pyplot.boxplot():绘制箱线图 6. matplotlib.pyplot.imshow():绘制图像 7. seaborn.lineplot():绘制线条图 8. seaborn.scatterplot():绘制散点图 9. seaborn.barplot():绘制柱状图 10. seaborn.histplot():绘制直方图 11. seaborn.boxplot():绘制箱线图 12. seaborn.heatmap():绘制热力图 关于您的第一个问题,如果您想用Python每隔一段时间画折线图,您可以使用matplotlib库中的animation模块。以下是一个简单的示例代码: ``` import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 生成随机数据 x_data = np.arange(0, 10, 0.1) y_data = np.sin(x_data) # 初始化图像 fig, ax = plt.subplots() line, = ax.plot(x_data, y_data) # 更新函数 def update(frame): y_data = np.sin(x_data + frame * 0.1) line.set_ydata(y_data) return line, # 动画函数 ani = FuncAnimation(fig, update, frames=100, interval=50, blit=True) # 显示动画 plt.show() ``` 这个示例代码会每隔50毫秒更新一次折线图,总共更新100次,您可以根据需要调整更新的时间间隔和更新的次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值