欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > python画图|水平直方图绘制

python画图|水平直方图绘制

2024/10/24 4:47:17 来源:https://blog.csdn.net/weixin_44855046/article/details/141956933  浏览:    关键词:python画图|水平直方图绘制

前序学习过程中,我们一起研究了:

【a】直方图绘制基础教程:python画图|直方图绘制教程-CSDN博客

【b】 直方图绘制进阶教程:python画图|直方图绘制教程进阶-CSDN博客

【c】 堆叠直方图绘制教程:python画图|堆叠直方图绘制-CSDN博客

【d】并列直方图绘制教程: python画图|并列直方图绘制-CSDN博客

今天,我们再学习一个系列:水平直方图绘制教程。

【1】官网教程

养成学习的好习惯,先到官网看看是啥模样:https://matplotlib.org/stable/gallery/lines_bars_and_markers/barh.html

图1

由图1可见,horizontal bar chart有单独的一章,我们从这里进入学习模式。 

【2】代码解读

官网代码依旧稳定输出,请出matplotlib模块画图、numpy模块做数学计算。

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

然后定义了一堆随机数:

np.random.seed(19680801) #随机数种子,用于生成随机数

为了认识【np.random.seed(19680801) #随机数种子,用于生成随机数】这个命令,我们新写一段代码,输出结果。

新代码包括两部分,一部分不定义随机数种子,直接生成随机数;另一部分先定义随机数种子,然后再生成随机数(每次生成随机数前,均需要定义随机数种子),代码如下:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算#未定义随机数种子,直接生成随机数
#error = np.random.rand(3) #直接生成随机数
#print('error=',error) #输出随机数
# Fixing random state for reproducibility
#error11 = np.random.rand(6) #完成随机数种子定义后,再生成随机数
#print('error11=',error11) #输出随机数
#error22 = np.random.rand(8) #完成随机数种子定义后,再生成随机数
#print('error22=',error22) #输出随机数#先定义随机数种子,再生成随机数
np.random.seed(19680801)#随机数种子,完成该定义后可生成随机数
error0 = np.random.rand(3) #随机数种子,完成该定义后可生成随机数
print('error0=',error0) #输出随机数
np.random.seed(19680801)#随机数种子,完成该定义后可生成随机数
error1 = np.random.rand(6) #随机数种子,完成该定义后可生成随机数
print('error1=',error1) #输出随机数
np.random.seed(19680801)#随机数种子,完成该定义后可生成随机数
error2 = np.random.rand(8) #随机数种子,完成该定义后可生成随机数
print('error2=',error2) #输出随机数

运行后的输出结果为:

图2

由图2可见:

未定义随机数种子 np.random.seed(),生成的随机数彼此之间不同;

定义了随机数种子np.random.seed(),生成的随机数是从特定的库里输出的。

这提醒我们,定义随机数种子对生成随机数有重要影响。

继续解读官网代码:定义画图

fig, ax = plt.subplots() #画图,用ax控制坐标轴属性

然后定义了画图的类别people;y_pos就是画水平直方图的时候,各方块对应y轴的坐标;performance是数学值;error是随机数。

# Example data
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') #定义了直方图类别,一共5类
y_pos = np.arange(len(people)) #赋值,y_pos按照顺序从[ 0 1 2 3 4]中取值
performance = 3 + 10 * np.random.rand(len(people)) #np.random.rand(len(people))生成五个随机数,然后与3相乘再加5
error = np.random.rand(len(people)) #输出np.random.rand(len(people))生成的五个随机数

然后定义了画直方图。

ax.barh(y_pos, performance, xerr=error, align='center') #ax调用barh()画水平直方图
# y_pos是各方块对应Y轴位置;performance是各方块的具体数值;
# xerr代表误差,会在方块上直接画出;align标签位置,即方块基底对应Y轴哪个位置
ax.set_yticks(y_pos, labels=people) #设定画图的Y轴,标签从people中选取
ax.invert_yaxis()  # labels read top-to-bottom 把标签放置在Y轴,自上而下
ax.set_xlabel('Performance') #设定X轴名称为Performance
ax.set_title('How fast do you want to go today?') #设定图名为How fast do you want to go today?plt.show() #输出图形

输出结果为:

图3

由图3可见,输出的水平直方图没有图例,也没有在图形中显示各部分所代表的数值,因此需要改写。

【3】代码改写-增加ax.bar_label()

由于ax.bar_label()需要指定直方图,因此先定义hbars。可以理解为hbars代表了方块

hbars=ax.barh(y_pos, performance, xerr=error, align='center') #ax调用barh()画水平直方图
# y_pos是各方块对应Y轴位置;performance是各方块的具体数值;
# xerr代表误差,会在方块上直接画出;align标签位置,即方块基底对应Y轴哪个位置

然后增加一条代码:

ax.bar_label(hbars,padding=3) #

此时输出结果为:

图4

由图4可见,各方块的实际数据已经显示。

【4】代码改写-增加颜色bar_colors

颜色模块需要单独设定,在hbars前增加一条代码:

bar_colors = ['tab:red', 'tab:blue', 'tab:purple', 'tab:orange', 'tab:green'] #设置方块颜色

此时的输出结果为:

图5

由图5可见,不同方块颜色不同。

【6】总结

本文学习了水平直方图绘制,各方块代表数值显示和方块颜色自由设定。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com