一、matplotlib基础
初识matplotlib:
- matplotlib是专门用于开发2D(3D)图表的包
- 绘图流程:
- 创建画布:plt.figure(figsize(20,8),dpi=100)
- 绘制图像:plt.plot(x,y)
- 显示图像:plt.show()
二、折线图的绘制
2.1 单层折线图的绘制
import matplotlib.pyplot as plt
import random
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.plot(x, y_shanghai)
# 2.1添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 修改x,y轴坐标刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
# 注意:坐标刻度不可以直接通过字符串进行修改,直接写plt.xticks(x_ticks_label[::5]) 会报错
plt.yticks(y_ticks[::5])
# 2.2添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
# 2.3添加描述信息
# 添加x轴描述信息
plt.xlabel("时间")
# 添加y轴描述信息
plt.ylabel("温度")
# 添加标题
plt.title("中午11点到12点之间的温度变化图示", fontsize=20)
# 2.4 图像保存
plt.savefig("./p1_1.png")
# 3.显示图像
plt.show()
2.2 多层折线图的绘制
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(0,3) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.plot(x, y_shanghai, label="上海") # label表示图例名称
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京") # color设置颜色,linestyle设置样式
# 2.1添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
# 2.3添加描述信息
# 添加x轴描述信息
plt.xlabel("时间")
# 添加y轴描述信息
plt.ylabel("温度")
# 添加标题
plt.title("中午11点到12点之间的温度变化图示", fontsize=20)
# 2.4 显示图例
plt.legend(loc="best")
# 2.5 图像保存
plt.savefig("./p1_2.png")
# 3.显示图像
plt.show()
2.3 多个坐标系显示——plt.subplots
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(0,3) for i in x]
# 1.创建画布
# 使用面向对象的绘图方法,返回值fig是图对象,axes是坐标系对象列表
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20,8), dpi=100)
# 2.绘制图像
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color='r', linestyle='--', label="北京")
# 2.1添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
# 2.2添加网格显示
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3添加描述信息
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
# 添加标题
axes[0].set_title("上海市中午11点到12点之间的温度变化图示", fontsize=20)
axes[1].set_title("北京市中午11点到12点之间的温度变化图示", fontsize=20)
# 2.4 显示图例
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 2.5 图像保存
plt.savefig("./p1_3.png")
# 3.显示图像
plt.show()
三、常见图形绘制
常见图形种类及意义
Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图等常见统计图
-
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
- 特点:能够显示数据的变化趋势,反映事物的变化情况(变化趋势)
- API:plt.plot(x,y)
-
散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式
- 特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
- API:plt.scatter(x,y)
-
柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中
- 特点:能更直观展示各个数据量的大小,比较数据量之间的差别(分析/对比)
- API:plt.bar(x, width, align=‘center’)
-
直方图:由一系列高低不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据范围,纵轴表示分布情况
- 特点:绘制连续性的数据展示一组或多组数据的分布状况(统计)
- API:plt.hist(x, bins=None) bins表示组距
-
饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类
- 特点:直观显示分类数据的占比情况(占比)
- API:plt.pie(x,labels=,autopct=,color) autopct表示指定占比显示的数据