练习一: 假设你获取到了 2017 年内地电影票房前 20 的电影 (列表 a) 和电影票房数据(列表 b), 那么如何更加直观的展示该数据?
- a = ["战狼 2","速度与激情 8","功夫瑜伽","西游伏妖篇","变形金刚 5: 最后的骑士","摔跤吧! 爸爸","加勒比海盗 5: 死无对证","金刚: 骷髅岛","极限特工: 终极回归","生化危机 6: 终章","乘风破浪","神偷奶爸 3","智取威虎山","大闹天竺","金刚狼 3: 殊死一战","蜘蛛侠: 英雄归来","悟空传","银河护卫队 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]
- from matplotlib import pyplot as plt
- import matplotlib
- """绘制条形图"""
- font = {'family': 'MicroSoft YaHei'}
- matplotlib.rc('font', **font) # 使支持中文
- 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=(20, 8), dpi=80) # 设置图形大小
- # plt.bar(range(len(x)), y, width=0.3) # 绘制条形图, 线条宽度
- plt.barh(range(len(x)), y, height=0.3, color='orange') # 绘制横着的条形图, 横着的用 height 控制线条宽度
- # 设置字符串到 x 轴
- plt.yticks(range(len(x)),x)
- plt.grid(alpha=0.3) # 添加网格
- plt.ylabel('电影名称')
- plt.xlabel('票房')
- plt.title('票房前 20 的电影')
- plt.show()
练习二: 假设知道了列表 a 中电影分别在 2017-09-14(b_14),2017-09-15(b_15),2017-09-16(b_16)三天的票房, 为了展示列表中电影本身的票房以及同其它电影的数据对比情况, 应该如何更加直观的呈现数据?
- a = ["猩球崛起 3: 终极之战","敦刻尔克","蜘蛛侠: 英雄归来","战狼 2"]
- b_16 = [15746,312,4497,319]
- b_15 = [12357,156,2045,168]
- b_14 = [2358,399,2358,362]
- from matplotlib import pyplot as plt
- import matplotlib
- font = {'family': 'MicroSoft YaHei'}
- matplotlib.rc('font', **font) # 使支持中文
- a = ["猩球崛起 3: 终极之战","敦刻尔克","蜘蛛侠: 英雄归来","战狼 2"]
- b_16 = [15746,312,4497,319]
- b_15 = [12357,156,2045,168]
- b_14 = [2358,399,2358,362]
- bar_width = 0.2 # 绘制多个条形图, 这里不能大于 0.3
- # 让后两个条形, 向后移动一个 bar_width
- x_14 = list(range(len(a)))
- x_15 = [i+bar_width for i in x_14]
- x_16 = [i+2*bar_width for i in x_14]
- plt.figure(figsize=(20, 8), dpi=80) # 设置图形大小
- plt.xticks(x_15, a) # 设置 x 轴刻度
- plt.bar(range(len(a)), b_14, width=bar_width, label='9 月 14 日')
- plt.bar(x_15, b_15, width=bar_width, label='9 月 15 日')
- plt.bar(x_16, b_16, width=bar_width, label='9 月 16 日')
- plt.legend() # 设置图例
- plt.xlabel('电影名称')
- plt.ylabel('票房 / 万')
- plt.title('对比票房')
- plt.savefig('./02.png')
- plt.show()
来源: http://www.bubuko.com/infodetail-3117344.html