直方图作为常见数据表达形式,使用频率较高,python也提供了灵活设置直方图形式的方法,今天和大家一起探索一下。
前序文章已经初步找到直方图绘制方法,可参考下述链接:
https://blog.csdn.net/weixin_44855046/article/details/141830709?spm=1001.2014.3001.5501
然后本次我们再加深一下,不仅要会画直方图,而且还能画好直方图,能随心所欲画直方图。
【1】官网教程
打开matplotlib主页,链接和图片如下:
https://matplotlib.org/stable/
图1
点开Example,就会进入看到画图最本质的几种表达形式:Lines、bars and markers
图2
直接点开左侧的Lines、bars and markers,或者点击右侧Lines、bars and markers下面的Bar color demo,就可以进入学习模式。
【2】官网教程优化
虽然Bar color demo在最初的链接里初步学习过,但学而时习之,不亦乐乎,我们再次学习。
首先把代码拷贝出来增加注释:
import matplotlib.pyplot as plt #引入matplotlib模块
fig, ax = plt.subplots() #定义一个带坐标轴的图形,用ax控制坐标轴属性
fruits = ['apple', 'blueberry', 'cherry', 'orange'] #定义字符型数组fruits
counts = [40, 100, 30, 55] #定义整形数组counts
bar_labels = ['red', 'blue', '_red', 'orange'] #定义字符型数组bar_labels
bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange'] #定义字符型数组bar_colors
ax.bar(fruits, counts, label=bar_labels, color=bar_colors) #使用ax调用bar模块画直方图
# 直方图类别为fruits,各类别对应数据为counts,各类别的标签为bar_labels,各类别的颜色为bar_colors
ax.set_ylabel('fruit supply') #设置纵轴名称为fruit supply
ax.set_title('Fruit supply by kind and color') #设置图形名称为Fruit supply by kind and color
ax.legend(title='Fruit color') #设置图例名为Fruit color
plt.show() #输出图形
输出图片为:
图3
其实这个图形有一些看起来违背常规的地方:
【a】图例名是颜色;
【b】有两个类别,apple和cherry居然都是红色;
【c】由于a的原因,四个类别只有三个图例。
为此我们需要把部分代码拿出来解读一下:
bar_labels = ['red', 'blue', '_red', 'orange'] #定义字符型数组bar_labels bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange'] #定义字符型数组bar_colors ax.bar(fruits, counts, label=bar_labels, color=bar_colors) #使用ax调用bar模块画直方图 # 直方图类别为fruits,各类别对应数据为counts,各类别的标签为bar_labels,各类别的颜色为bar_colors
bar_labels在ax.bar里面被设置为图例;
在bar_labels里面同时存在‘red’和‘_red’,它们最后合并成一个‘red’在图例里输出了;
尝试将‘_red’改为‘red’,最后输出的图形里有两个red图例。
图4
原因不做深究,我们先尝试把第二个red改为green,此时的输出结果为:
图5
由图5可见,尽管label标签里面出现了green,但对应的颜色依然是红色。
追溯原因发现:bar_colors的第一和第三项都是red。尝试将第三项改为green,继续输出图形。
bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange'] #定义字符型数组bar_colors
图6
由图6可见颜色和标签的字面意思对上了,相当于前述的【b】和【c】被解决,接下来尝试解决【a】:把图例名改为标签名,改后如下
bar_labels = ['apple', 'blueberry', 'cherry', 'orange'] #定义字符型数组bar_labels
图7
由图7可见,图例名已经和类别名一致,至此前述【a】、【b】和【c】均被解决。
【3】总结
本文探索了画直方图时如何灵活设置图例、颜色,有助于大家优化数据表达效果。