【Python】数据分析.matplotlib.条形图案例处理



数据分析-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()

在这里插入图片描述

返回顶部


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛ひ追导弹'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值