Matplotlib之条形图绘制,数据可视化操作

2022-07-30,,,,

1 条形图介绍

条形图是用宽度相同的条形的高度或者长短来表示数据多少的图形。条形图可以横置或者纵置,纵置时也称为柱形图。
特点: 能够使人一眼看出各个数据的大小,易于比较数据之间的差别。

2 条形图绘制

条形图通过bar()函数绘制
• plt.bar(x, height) # 绘制以x为x轴位置,height为y轴位置的竖条形图

示例一:
假设获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据

a = [“流浪地球”,“复仇者联盟4:终局之战”,“哪吒之魔童降世”,“疯狂的外星人”,“飞驰人生”,“蜘蛛侠:英雄远征”,“扫毒2天地对决”,“烈火英雄”,“大黄蜂”,“惊奇队长”,“比悲伤更悲伤的故事”,“哥斯拉2:怪兽之王”,“阿丽塔:战斗天使”,“银河补习班”,“狮子王”,“反贪风暴4”,“熊出没”,“大侦探皮卡丘”,“新喜剧之王”,“使徒行者2:谍影行动”,“千与千寻”]
b =[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 单位:亿

代码如下:

 from matplotlib import pyplot as plt import matplotlib import matplotlib
font = { 'family':'SimHei', 'weight':'bold', 'size':12 } matplotlib.rc("font", **font) a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"] b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] #设置图片大小 plt.figure(figsize=(14,8)) #绘制条形图 plt.bar(a,b) #设置刻度及刻度标签 x_t = list(range(len(a))) plt.xticks(x_t,a,rotation=90) plt.show() 

效果图:

3 水平条形图绘制

水平条形图通过barh()函数绘制
• plt.barh(y, width) # 绘制以y为y轴位置,width为y轴位置的水平条形图

示例二:

# 以示例一的数据作图 a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"] b =[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] plt.figure(figsize=(14,8)) x_t = range(len(a)) plt.yticks(x_t,a) # plt.bar(a,b) plt.barh(a,b,height=0.5) plt.show() 

效果图:

示例三:

水果 Q1销售额 Q2销售额
苹果 1000 1200
梨子 800 700
车厘子 3000 2800

代码一:
堆叠条形图: 没有封装相应的接口

fruit = ["苹果","梨子","车厘子"] Q1_sales = [1000,800,3000] Q2_sales = [1200,700,2800] #两者都没有设置位置,就重复  x是位置 plt.bar(fruit,Q1_sales,label="Q1销售额") plt.bar(fruit,Q2_sales,label="Q2销售额") plt.show() 

效果图:

代码二:

分组条形图

fruit = ["苹果","梨子","车厘子"] Q1_sales = [1000,800,3000] Q2_sales = [1200,700,2800] x_t = list(range(len(fruit))) # width 设置条形的宽度 width = 0.35 Q1 = [i-width/2 for i in x_t] # 将Q1的销售额放在x刻度的左边 Q2 = [i+width/2 for i in x_t] # 将Q2的销售额放在x刻度的右边 plt.bar(Q1,Q1_sales,width=0.35,label='Q1销售额') plt.bar(Q2,Q2_sales,width=0.35,label='Q1销售额') 

代码三:

#使用numpy import numpy as np
fruit = ["苹果","梨子","车厘子"] Q1_sales = [1000,800,3000] Q2_sales = [1200,700,2800] p=np.arange(len(fruit)) width=0.35 move=width/2 #p-move广播机制 plt.bar(p-move,Q1_sales,width=0.35,label="Q1销售额") plt.bar(p+move,Q2_sales,width=0.35,label="Q2销售额") # 设置数据标签 def set_data(x_p,x_q): for x,y in zip(x_p,x_q): plt.text(x,y+0.5,str(y),ha='center',va='bottom') set_data(Q1,Q1_sales) set_data(Q2,Q2_sales) plt.legend() plt.show() 

效果图:

本文地址:https://blog.csdn.net/m0_45209371/article/details/108241200

《Matplotlib之条形图绘制,数据可视化操作.doc》

下载本文的Word格式文档,以方便收藏与打印。