数据分析-matplotlib.柱状\条形图案例处理
案例一: 假设你获取到了2017年内地电影票房前20的电影和电影票房数据,使用条形图绘制
一、纵向条形图
1.纵向条形图: plt.barh()
from matplotlib import pyplot as plt
from matplotlib import font_manager
#设置字体
my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
#设置坐标
x = ["战狼2","速度与激情8","功夫瑜伽","西游记伏魔篇","变形金刚5\n:最后的骑士","摔跤吧!爸爸","加勒比海盗5:\n死无对证",
"金刚:骷髅岛","极限特工:\n终极回归","生化危机6:\n终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:\n输死一战",
"蜘蛛侠:\n英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
y = [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]
#设置图片大小
plt.figure(figsize=(20,8),dpi=80)
#绘制表格,调整刻度
plt.bar(range(len(x)),y,width=0.3)
#plt.xticks(range(len(x)),x,rotation=45,fontproperties=my_font)
#如果横坐标名称出现重叠不便于展示,并且旋转后依然不能解决问题,可在坐标内添加“\n”进行换行,如图:movie-1.png
#但如果依然不能满足要求,可以尝试绘制横向条形图,见:matplotlib_05_01
plt.xticks(range(len(x)),x,fontproperties=my_font)
#添加描述信息
plt.xlabel("电影名称",fontproperties=my_font)
plt.ylabel("票房/亿元",fontproperties=my_font)
plt.title("2017年内地电影票房前20的电影和电影票房数据",fontproperties=my_font)
#绘制网格
plt.grid(alpha=0.3)
#保存图片
plt.savefig("movie-1.png")
#显示
plt.show()
对x轴信息旋转处理:我们会发现电影名称有部分缺失*
对x轴信息部分换行处理:
返回顶部
二、横向条形图
2.横向条形图: plt.barh()
一开始我们沿用上面的部分代码,出现了异常:TypeError: barh() got multiple values for argument 'width'
,为查询原因,我们查看 plt.barh()
方法的源码:
通过查看源码,原来在这里系统定义的是height属性~,同时还要注意,当图形横过来之后,要对应的调整x、y轴的描述信息,否则会出现如下图:
#绘制表格,调整刻度
plt.barh(range(len(x)),y,height=0.3)
plt.yticks(range(len(x)),x,fontproperties=my_font)
#添加描述信息
plt.ylabel("电影名称",fontproperties=my_font)
plt.xlabel("票房/亿元",fontproperties=my_font)
plt.title("2017年内地电影票房前20的电影和电影票房数据",fontproperties=my_font)
三、柱状图
案例二: 假设知道几部电影在某三天的上映量,展示出电影本身票房以及同其他几部电影的票房对比
from matplotlib import pyplot as plt
from matplotlib import font_manager
#设置字体
my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
#设置坐标轴
x = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
y_20 = [15746,312,4497,319]
y_21 = [12357,156,2045,168]
y_22 = [2358,399,2358,362]
bar_width = 0.2
x_20 = list(range(len(x)))
x_21 = [i+bar_width for i in x_20]
x_22 = [i+bar_width*2 for i in x_20]
#设置大小
plt.figure(figsize=(20,8),dpi=80)
#绘制
plt.bar(range(len(x)),y_20,width=bar_width,label="8月20日")
plt.bar(x_21,y_21,width=bar_width,label="8月21日")
plt.bar(x_22,y_22,width=bar_width,label="8月22日")
#设置坐标信息
plt.xticks(x_21,x,fontproperties=my_font)
#添加描述信息
plt.xlabel("电影名称",fontproperties=my_font)
plt.ylabel("当日票房/万元",fontproperties=my_font)
plt.title("8月份某3天4部电影各自票房变化",fontproperties=my_font)
#绘制图例
plt.legend(prop=my_font)
#展示
plt.show()