Python学习记录 - matplotlib绘制电影票房条形图

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

数据来源:http://58921.com/alltime/2017
数据如下:a -->电影名称
a = [“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5:最后的骑士”,“摔跤吧!爸爸”,“加勒比海盗5:死无对证”,“金刚:骷髅岛”,“极限特工:终极回归”,“生化危机6:终章”,“乘风破浪”,“神偷奶爸3”,“智取威虎山”,“大闹天竺”,“金刚狼3:殊死一战”,“蜘蛛侠:英雄归来”,“悟空传”,“银河护卫队2”,“情圣”,“新木乃伊”,]
b --> 电影票房,单位亿元:
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]

# -*- coding: utf-8 -*-
#画图先导入对应的包以及设定中文字体
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='\Windows\Fonts\msyhl.ttc')

x = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队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 = (16,6),dpi=60)
#绘制条形图 - 使用bar
plt.bar(x,y)

在这里插入图片描述

#调整颜色,以及图形宽度
plt.bar(x,y,color = 'Teal',width = 0.5)
#调整X轴的中文字体,考虑到电影名称比较长,将文字旋转90度
plt.xticks(x,fontproperties=my_font,rotation=90)

在这里插入图片描述

#通过barh将条形图横向展示,此时宽度设定使用 height
plt.figure(figsize = (16,10),dpi=80) #由于图形横向展示,可以调整高度
plt.barh(x,y,color = 'Navy',height = 0.5)
plt.yticks(x,fontproperties=my_font)
plt.grid(alpha=0.3) #添加背景网格线,调整透明度为0.3
plt.title('各电影票房查看',fontproperties = my_font)
plt.xlabel('电影票房,单位:亿',fontproperties = my_font)

在这里插入图片描述

问题2: 假设你知道了列表a中电影分别在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现该数据?

数据来源:www.cbooo.cn/movieday

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='\Windows\Fonts\msyhl.ttc')
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
# 先绘制9月14日的电影表现
plt.bar(a,b_14) #暂时忽略X轴的中文乱码,后续会进行调整

在这里插入图片描述

如果要将15.16号的数据并列体现,需要将15和16号对应的X轴向右偏移条形图的宽度即可

#调整图形大小
plt.figure(figsize=(16,8))
#设定条形图宽度
bar_width=0.3
#分别设定14,15,16三天对应的X轴
x_14 = range(len(a)) #14号就是列表a中元素的个数[0,1,2,3]
x_15 = [i + bar_width for i in x_14] #15号,需要向右偏移1个宽度
x_16 = [i + bar_width*2 for i in x_14] #16号需要向右偏移2个宽度
#分别绘制图形,同时设定不同的颜色以及图例
plt.bar(x_14,b_14,width=bar_width,color='Teal',label='9月14日')
plt.bar(x_15,b_15,width=bar_width,color='orange',label='9月15日')
plt.bar(x_16,b_16,width=bar_width,color='Cyan',label='9月16日')

在这里插入图片描述

#调整X轴,因为15号为中间,所以可以直接对15号的X轴中文字体进行调整
plt.xticks(x_15,a,fontproperties = my_font)
#增加图例
plt.legend(prop=my_font)

在这里插入图片描述

#如果要求每一天的条形之间保留空隙,可以调整x_15和x_16对应的参数
plt.figure(figsize=(16,8),dpi=80)
bar_width=0.3
x_14 = range(len(a))
x_15 = [i + bar_width+0.02 for i in x_14]  #多留出0.02的宽度
x_16 = [i + bar_width*2+0.02*2 for i in x_14]
plt.bar(x_14,b_14,width=bar_width,color='Teal',label='9月14日')
plt.bar(x_15,b_15,width=bar_width,color='orange',label='9月15日')
plt.bar(x_16,b_16,width=bar_width,color='Cyan',label='9月16日')
plt.xticks(x_15,a,fontproperties = my_font)
plt.legend(prop=my_font)

在这里插入图片描述

#当然,也可以将每一天的数据一起显示,只是调整条形宽度
plt.figure(figsize=(16,8),dpi=80)
x_14 = range(len(a))
plt.bar(x_14,b_14,width=0.3,color='Teal',label='9月14日') #设定14号的数据条最宽
plt.bar(x_14,b_15,width=0.2,color='orange',label='9月15日') #逐次调整条形宽度
plt.bar(x_14,b_16,width=0.1,color='Cyan',label='9月16日')
plt.xticks(x_14,a,fontproperties = my_font)
plt.legend(prop=my_font)

在这里插入图片描述

总结:查看得知猩球崛起的票房在这3日内,不断提高,尤其在15号上涨明显
敦刻尔克和占良的票房并不突出

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值