对四种常用图形的总结,用思维导图描述如下:
绘制条形图:
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()
绘制直方图:
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()
这图也太丑了。忍不住吐槽了。