Matplotlib之条形图绘制,数据可视化操作
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