如何利用matplotlib画不同需求的柱状图
Admin 2022-09-06 群英技术资讯 295 次浏览
首先如果柱状图中有中文,比如X轴和Y轴标签需要写中文,解决中文无法识别和乱码的情况,加下面这行代码就可以解决了:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码
以下总共展示了三种画不同需求的柱状图:
画多组两个并列的柱状图:
import matplotlib import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] labels = ['G1', 'G2', 'G3', 'G4', 'G5'] men_means = [20, 34, 30, 35, 27] women_means = [25, 32, 34, 20, 25] x = np.arange(len(labels)) # the label locations width = 0.35 # the width of the bars fig, ax = plt.subplots() rects1 = ax.bar(x - width/2, men_means, width, label='Men') rects2 = ax.bar(x + width/2, women_means, width, label='Women') # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_ylabel('Scores') ax.set_title('Scores by group and gender') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() def autolabel(rects): """Attach a text label above each bar in *rects*, displaying its height.""" for rect in rects: height = rect.get_height() ax.annotate('{}'.format(height), xy=(rect.get_x() + rect.get_width() / 2, height), xytext=(0, 3), # 3 points vertical offset textcoords="offset points", ha='center', va='bottom') autolabel(rects1) autolabel(rects2) fig.tight_layout() plt.show()
绘制好的柱状图如下:
画两组5个并列的柱状图:
import matplotlib import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif']=['SimHei'] # 解决中文乱码 labels = ['第一项', '第二项'] a = [4.0, 3.8] b = [26.9, 48.1] c = [55.6, 63.0] d = [59.3, 81.5] e = [89, 90] x = np.arange(len(labels)) # 标签位置 width = 0.1 # 柱状图的宽度,可以根据自己的需求和审美来改 fig, ax = plt.subplots() rects1 = ax.bar(x - width*2, a, width, label='a') rects2 = ax.bar(x - width+0.01, b, width, label='b') rects3 = ax.bar(x + 0.02, c, width, label='c') rects4 = ax.bar(x + width+ 0.03, d, width, label='d') rects5 = ax.bar(x + width*2 + 0.04, e, width, label='e') # 为y轴、标题和x轴等添加一些文本。 ax.set_ylabel('Y轴', fontsize=16) ax.set_xlabel('X轴', fontsize=16) ax.set_title('这里是标题') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() def autolabel(rects): """在*rects*中的每个柱状条上方附加一个文本标签,显示其高度""" for rect in rects: height = rect.get_height() ax.annotate('{}'.format(height), xy=(rect.get_x() + rect.get_width() / 2, height), xytext=(0, 3), # 3点垂直偏移 textcoords="offset points", ha='center', va='bottom') autolabel(rects1) autolabel(rects2) autolabel(rects3) autolabel(rects4) autolabel(rects5) fig.tight_layout() plt.show()
绘制好的柱状图如下:
3. 要将柱状图的样式画成适合论文中使用的黑白并且带花纹的样式:
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码 labels = ['第一项', '第二项'] a = [50, 80] b = [37, 69] c = [78, 60] d = [66, 86] e = [80, 95] # marks = ["o", "X", "+", "*", "O"] x = np.arange(len(labels)) # 标签位置 width = 0.1 # 柱状图的宽度 fig, ax = plt.subplots() rects1 = ax.bar(x - width * 2, a, width, label='a', hatch="...", color='w', edgecolor="k") rects2 = ax.bar(x - width + 0.01, b, width, label='b', hatch="oo", color='w', edgecolor="k") rects3 = ax.bar(x + 0.02, c, width, label='c', hatch="++", color='w', edgecolor="k") rects4 = ax.bar(x + width + 0.03, d, width, label='d', hatch="XX", color='w', edgecolor="k") rects5 = ax.bar(x + width * 2 + 0.04, e, width, label='e', hatch="**", color='w', edgecolor="k") # 为y轴、标题和x轴等添加一些文本。 ax.set_ylabel('Y', fontsize=16) ax.set_xlabel('X', fontsize=16) ax.set_title('标题') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend()
以上
总结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文给大家分享的是用python编写自动生成日历的功能,本文的实现步骤和过程并不难,实现效果及代码如下,感兴趣的朋友可以了解看看,接下来跟随小编来学习一下吧。
PyQt提供了一个设计良好的窗口控件集合,具有更方便的操作性。学过VB的同学会知道,相比与VB的使用,在界面设计上元素更丰富,这篇文章主要介绍了基于PyQt5完成的图转文功能,需要的朋友可以参考下
在实际中遇到一个时间处理问题,需要将 Sep 06, 2014 19:30 (UTC 时间) 和 当前时间比较早晚,知道 此 2014-09-06 19:30 格
本文实例为大家分享了OpenCV实现相机校正的具体代码,供大家参考,具体内容如下
这篇文章主要为大家介绍了python神经网络特征金字塔FPN原理的解释,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008