往期推荐:
Python数据分析(一)matplotlib基础绘图和调整x轴刻度
Python数据分析(二)matplotlib折线图应用实例——绘制10点到12点的气温
Python数据分析(三)matplotlib折线图应用实例——自定义图形风格
matplotlib常用统计图
前言
matplotlib能够绘制折线图、散点图、柱状图、直方图、箱线图、饼图等
如何选择哪种统计图来更直观的呈现数据?
对比常用统计图
- 折线图
以折线的上升或下降来表示统计数量的增减变化的统计图,能够显示数据的变化趋势,反映事物的变化情况(变化) - 直方图
由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据范围,纵轴表示分布情况,绘制连续性的数据,展示一组或者多组数据的分布状况(统计) - 条形图
排列在工作表的列或行中的数据可以绘制到条形图中,绘制离散性的数据,能够一眼看出各个数据的大小,比较数据之间的差别(统计) - 散点图
用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式,判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
01 绘制散点图
假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
a = [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, 22, 23]
b = [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, 12, 13, 6]
代码如下:
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
import random
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="/System/Library/Fonts/Supplemental/Songti.ttc", size=14)
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, 22, 23]
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, 12, 13, 6]
x_3 = range(1, 32)
x_10 = range(49, 80)
plt.figure(figsize=(20, 8), dpi=80)
# 绘图
plt.scatter(x_3, y_3, label="3月")
plt.scatter(x_10, y_10, label="10月")
_x = list(x_3)+list(x_10)
_xticks = ["3月{}日".format(i) for i in x_3]
_xticks += ["10月{}日".format(i-50) for i in x_10]
# 刻度线
plt.xticks(_x[::3], _xticks[::3], rotation = 45, fontproperties=font)
# plt.xticks(x_10[::3], _xticks_10[::3], rotation = 45, fontproperties=font)
plt.yticks(fontproperties=font)
# 标签
plt.xlabel("月份", fontproperties=font)
plt.ylabel("温度(°c)", fontproperties=font)
plt.title("3月和10月的气温变化规律", fontproperties=font)
# 显示图例
plt.legend(prop=font)
# 显示图形
plt.show()
散点图更多应用场景:
- 不同条件(维度)之间的内在关联关系
- 观察数据的离散聚合程度
02 绘制条形图
假设你获取到了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] 单位:亿
代码如下(示例):
_x = range(len(a))
_y = b
plt.bar(_x, b, width = 0.2)
# bar绘制竖直条形图,只能接受含数字的可迭代对象
# barh绘制横向条形图,只能接受含数字的可迭代对象
# width表示竖直条形图长条的宽度,默认为0.8