Python Matplotlib 条形图黑白填充技巧:hatch参数详解
本文介绍在Python中使用Matplotlib绘制条形图时,如何仅通过黑白配色和填充图案区分数据。针对学术或出版对颜色限制的要求,详细解析hatch参数(如'/'、'***'、'xxx')的应用,展示如何生成符合要求的黑白条形图,并附带完整可运行代码。
本文分享了利用Python的Matplotlib库实现条形图黑白填充效果的具体代码,供读者参考学习。
黑白条形图绘制需求背景
在撰写专利或学术论文时,常需使用Python的Matplotlib绘制条形图。起初尝试使用三种不同颜色来区分数据系列,效果如原图所示。

随后收到反馈,要求必须使用黑白配色,禁止使用其他颜色。为此,尝试采用灰度等级进行区分,效果如原图所示。

使用hatch参数实现填充区分
然而再次被指出不可行,规定不能使用灰度,必须通过条形框的填充格式(Hatching)来区分数据。经过多方查找,最终找到了解决方案。下图展示了最终的填充效果,完整源码附后。

Matplotlib核心代码实现
实现该效果的核心代码如下:
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
Y2016 = [83.2, 85, 83.9]
Y2017 = [80.4, 74.6, 86.5]
Y2018 = [85.8, 87.2, 89.1]
labels = ['准确性', '敏感性', '特异性']
bar_width = 0.25
# 绘图
plt.figure(figsize=(10,10))
plt.bar(np.arange(3), Y2016, label='TSVM', color='white', alpha=1, width=bar_width,edgecolor="k",hatch='/')
plt.bar(np.arange(3) + bar_width, Y2017, label=u'协同训练半监督', color='white', alpha=1, edgecolor="k",width=bar_width,hatch="***")
plt.bar(np.arange(3) + 2*bar_width, Y2018, label=u'结合TSVM和协同训练半监督', color='white', alpha=1, edgecolor="k",width=bar_width,hatch="xxx")
# 添加刻度标签
plt.xticks(np.arange(3) + bar_width, labels)
plt.tick_params(labelsize=20)
# 设置Y轴的刻度范围
plt.ylim([0, 100])
# 为每个条形图添加数值标签
for x2016, y2016 in enumerate(Y2016):
plt.text(x2016, y2016 + 2, '%s' % y2016, ha='center',fontsize=20)
for x2017, y2017 in enumerate(Y2017):
plt.text(x2017 + bar_width, y2017 + 2, '%s' % y2017, ha='center',fontsize=20)
for x2018, y2018 in enumerate(Y2018):
plt.text(x2018 + 2*bar_width, y2018 + 2, '%s' % y2018, ha='center',fontsize=20)
# 显示图例
plt.legend(bbox_to_anchor=(0.5,1), loc=3, borderaxespad=0,fontsize=17)
plt.savefig('foo.png')
# 显示图形
plt.show() hatch参数详解与密度控制
代码中关键参数为hatch,其取值决定了填充图案的样式。可用的符号包括:'*'、'o'、'O'、'/'、'|'、'+'、'-'、'.'。填充的密度取决于引用符号的数量,例如hatch='/'的填充密度明显低于hatch='///'。
以上就是本文的全部内容,希望对读者有所帮助,欢迎继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









