数据分析day02-Matplotlib绘制条形图、散点图、直方图

  对四种常用图形的总结,用思维导图描述如下:

绘制条形图:

 1 # Author:K
 2 from matplotlib import pyplot as plt
 3 from matplotlib import font_manager
 4 
 5 my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc')
 6 
 7 a = ['战狼2', '速度与激情8', '功夫瑜伽', '西游伏妖篇', '变形金刚5:最后的骑士', '摔跤吧!爸爸', '加勒比海盗5死无对证', '金刚:骷髅岛', '极限特工:终极回归', '生化危机6:终章', '乘风破浪',
 8      '神偷奶爸3', '智取威虎山', '大闹天竺', '金刚狼3:殊死一战', '蜘蛛侠:英雄归来', '悟空传', '银河护卫队2', '情圣', '新木乃伊', ]
 9 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,
10      6.99, 6.88, 6.86, 6.58, 6.23]
11 
12 # 设置图片大小
13 plt.figure(figsize=(20, 8), dpi=80)
14 # 绘制条形图
15 plt.bar(range(len(a)), b, width=0.3, color='orange')
16 # 设置x轴刻度
17 plt.xticks(range(len(a)), a, rotation=45, fontproperties=my_font)
18 # 保存图片
19 plt.savefig('./bar_movie.png')
20 # 展示图片
21 plt.show()
电影票房统计

 1 # Author:K
 2 from matplotlib import pyplot as plt
 3 from matplotlib import font_manager
 4 
 5 my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc')
 6 
 7 a = ['猩球崛起3:终极之战', '敦刻尔克', '蜘蛛侠:英雄归来', '战狼2']
 8 b_16 = [15746, 312, 4497, 319]
 9 b_15 = [12357, 156, 2045, 168]
10 b_14 = [2358, 399, 2358, 362]
11 
12 # 设置图行大小,DPI
13 plt.figure(figsize=(20, 8), dpi=80)
14 # # 绘制三次条形图
15 # plt.bar(range(len(a)), b_14, width=0.3, label='2017-09-14')
16 # plt.bar(range(len(a), len(a) * 2), b_15, width=0.3, label='2017-09-15')
17 # plt.bar(range(len(a) * 2, len(a) * 3), b_16, width=0.3, label='2017-09-16')
18 #
19 # # 修改x轴的刻度
20 # x_labels = a + a + a
21 # plt.xticks(range(len(x_labels)), x_labels, fontproperties=my_font)
22 # # 显示图例
23 # plt.legend()
24 # # 保存图片
25 # plt.savefig('./bar_movie_comp1.png')
26 # # 展示图形
27 # plt.show()
28 
29 # 第二种方式:绘制三次条形图
30 bar_width = 0.2
31 x_14 = range(len(a))
32 x_15 = [i + bar_width for i in x_14]
33 x_16 = [i + bar_width * 2 for i in x_14]
34 
35 plt.bar(x_14, b_14, width=bar_width, label='2017-09-14')
36 plt.bar(x_15, b_15, width=bar_width, label='2017-09-15')
37 plt.bar(x_16, b_16, width=bar_width, label='2017-09-16')
38 
39 # 修改x轴的刻度
40 plt.xticks(x_15, a, fontproperties=my_font, size=15)
41 # 显示图例
42 plt.legend()
43 # 保存图片
44 plt.savefig('./bar_movie_comp2.png')
45 # 展示图形
46 plt.show()
电影票房对比情况

  第一种方式绘制出来的图:

  第二种方式绘制出来的图:

 1 # Author:K
 2 from matplotlib import pyplot as plt
 3 from matplotlib import font_manager
 4 
 5 my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc')
 6 
 7 a = ['战狼2', '速度与激情8', '功夫瑜伽', '西游伏妖篇', '变形金刚5:最后的骑士', '摔跤吧!爸爸', '加勒比海盗5死无对证', '金刚:骷髅岛', '极限特工:终极回归', '生化危机6:终章', '乘风破浪',
 8      '神偷奶爸3', '智取威虎山', '大闹天竺', '金刚狼3:殊死一战', '蜘蛛侠:英雄归来', '悟空传', '银河护卫队2', '情圣', '新木乃伊', ]
 9 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,
10      6.99, 6.88, 6.86, 6.58, 6.23]
11 
12 # 设置图片大小
13 plt.figure(figsize=(20, 8), dpi=80)
14 # 绘制横着的条形图
15 plt.barh(range(len(a)), b, height=0.3, color='orange')
16 # 设置y轴刻度
17 plt.yticks(range(len(a)), a, fontproperties=my_font)
18 # 显示网格
19 plt.grid(alpha=0.3)
20 # 保存图片
21 plt.savefig('./barh_movie.png')
22 # 展示图片
23 plt.show()
横着的条形图

绘制散点图:

 1 # Author:K
 2 from matplotlib import pyplot as plt
 3 from matplotlib import font_manager
 4 
 5 my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc')
 6 
 7 y_3 = [11, 17, 16, 11, 12, 11, 12, 6, 6, 7, 8, 9, 12, 15, 14, 17, 18, 21, 16, 17, 20, 14, 15, 15, 15, 19, 21, 22, 22,
 8        22, 23]
 9 y_10 = [26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 17, 10, 11, 13,
10         12, 13, 6]
11 
12 x_3 = range(1, 32)
13 x_10 = range(51, 82)
14 
15 # 设置图片大小
16 plt.figure(figsize=(20, 8), dpi=80)
17 
18 # 绘制散点图
19 plt.scatter(x_3, y_3, label='3月份')
20 plt.scatter(x_10, y_10, label='10月份')
21 
22 # 设置x轴刻度
23 _x = list(x_3) + list(x_10)
24 x_ticks_labels = ['3月%s日' % s for s in x_3]
25 x_ticks_labels += ['10月{}日'.format(i-50) for i in x_10]
26 
27 plt.xticks(_x[::3], x_ticks_labels[::3], rotation=45, fontproperties=my_font, size=13)
28 
29 # 设置y轴间距
30 plt.yticks(range(min(min(y_3), min(y_10)), max(max(y_3), max(y_10))+1)[::2], size=13)
31 
32 # 添加图片信息
33 plt.xlabel('时间', fontproperties=my_font, size=17)
34 plt.ylabel('温度', fontproperties=my_font, size=17)
35 plt.title('3月份和10月份的温度情况', fontproperties=my_font, size=20)
36 
37 # 显示图例
38 plt.legend(loc='upper center', prop=my_font)
39 
40 plt.show()
3月和10月气温情况

绘制直方图:

 1 # Author:K
 2 from matplotlib import pyplot as plt
 3 
 4 # 解决中文显示问题
 5 plt.rcParams['font.sans-serif'] = ['SimHei']
 6 # plt.rcParams['axes.unicode_minus'] = False  # 这句话暂时还不需要用到
 7 
 8 a = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124,
 9      101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111, 78, 132, 124, 113, 150, 110, 117, 86,
10      95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136, 123, 117, 119, 105, 137,
11      123, 128, 125, 104, 109, 134, 125, 127, 105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114, 105, 115,
12      132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134, 156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,
13      123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109, 106, 123, 116, 131, 127,
14      115, 118, 112, 135, 115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154, 136, 100, 118, 119, 133, 134,
15      106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126, 114, 140, 103,
16      130, 141, 117, 106, 114, 121, 114, 133, 137, 92, 121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113, 134,
17      106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146,
18      133, 101, 131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111, 111, 133, 150]
19 
20 # 设置图形大小,DPI
21 plt.figure(figsize=(20, 10), dpi=80)
22 
23 d = 3  # 定义组距
24 num_bins = (max(a) - min(a)) // d  # 计算组数,这里要注意的是如果不能整除的话,图形会左移或者右移,不会对应网格
25 
26 # 绘制直方图
27 plt.hist(a, num_bins, rwidth=1, edgecolor='black', color='orange')
28 
29 # 设置x轴刻度
30 plt.xticks(range(min(a), max(a) + d, d))
31 
32 # 绘制网格
33 plt.grid(alpha=0.3)
34 
35 # 设置标题,x轴,y轴信息
36 plt.xlabel('电影时长', size=15)
37 plt.ylabel('电影数量', size=15)
38 plt.title('电影时长分布', size=20)
39 
40 # 保存图形
41 plt.savefig('./hist_demo.png')
42 
43 # 展示图形
44 plt.show()
电影时长分布情况

  用条形图模拟直方图:

 1 # Author:K
 2 """
 3     由于数据统计过,所以不能用直方图,所以用条形图来显示成直方图的形式
 4 """
 5 from matplotlib import pyplot as plt
 6 
 7 interval = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 60, 90]
 8 width = [5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 30, 60]
 9 quantity = [836, 2737, 3723, 3926, 3596, 1438, 3273, 642, 824, 613, 215, 47]
10 
11 # 设置图形大小,DPI
12 plt.figure(figsize=(20, 8), dpi=80)
13 
14 # 绘制条形图
15 plt.bar(range(len(quantity)), quantity, width=1, edgecolor='black', color='cyan')
16 
17 # 设置x轴刻度
18 _x = [i-0.5 for i in range(len(quantity)+1)]
19 plt.xticks(_x, interval+[150])
20 
21 # 显示网格
22 plt.grid(alpha=0.3)
23 
24 # 保存图形
25 plt.savefig('./hist_to_bar.png')
26 
27 # 展示图形
28 plt.show()
View Code

    这图也太丑了。忍不住吐槽了。

猜你喜欢

转载自www.cnblogs.com/KisInfinite/p/11892865.html