matplotlib的三层结构

1、容器层

画板层 Canvas
画布层 Figure:plt.figure()
绘图区/坐标系 axes:plt.subplots()创建多个绘图区

2、辅助显示层(都是在绘图区之上的)

为了让图像更清晰明了而加上的,网格/图例什么的

3、图像层(都是在绘图区之上的)

我们可以在绘图区上画各种各样的图表


从骨架开始完善matplotlib

image.png
我们使用matplotlib最简陋的时候。

我们需要先创建画布,绘制图像,显示图像。——这是一个最简单的画图框架

设置画布属性与图片保存

figure(figsize= (),dpi=())
figsize : 指定图的长宽
dpi : 图像的清晰度 dots per inch
返回fii对象

plt.savefig(path)
image.png

当我们调用plt.show之后,我们会释放画布中所有的资源,所以我们在保存图像的时候,要写在plt.show()之前。

image.png

当我们绘制好图片之后,可能会出现y轴波动太大的情况,这是因为我们y轴的区间或者说分辨率设置不合理所导致的。我们y轴的设置要契合实际情况。

plt.yticks()这个函数的功能是用来修改y的刻度。


image.png
在这里除了123是必须的,其他都是可有可无的,是我们为了使图像更好看而加上去的。

利用到图像层的更改

再添加一个城市的温度变化

多次plot

image.png
image.png
图例要加了label才能看得出来


同时绘制多张图——面向对象的操作方法
figure,axes = plt.subplots(nrows=1,ncols=1,**fig_kw)

返回画布和绘图区

画布之上可以创建多个绘图区

axes[0]代表操作第一个绘图区
axes[1]代表操作第二个绘图区

plt.方法名
axes.set_方法名


import matplotlib.pyplot as plt
import random

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

1、准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 2、绘制图表

创建画布
plt.figure()

figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80) # 利用subplot绘图
axes[0].plot(x,y_shanghai,label=”上海”)
axes[1].plot(x,y_beijing,color=”r”,linestyle=”—“,label=”北京”)

在每个绘图区显示图例
axes[0].legend()
axes[1].legend()

修改刻度

x_ticks_label = [“11点{}分”.format(i) for i in x]
y_ticks = range(40)

修改x、y的刻度显示
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[0].set_yticks(y_ticks[::5])
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
axes[1].set_yticks(y_ticks[::5])

添加网格显示
axes[0].grid(True,linestyle=”—“,alpha=0.5)
axes[1].grid(True,linestyle=”—“,alpha=0.5)

添加x、y轴描述以及标签信息

添加描述信息
axes[0].set_xlabel(“时间幻化”)
axes[0].set_ylabel(“温度变化”)
axes[0].set_title(“上海11点到12点的温度变化”)

axes[1].set_xlabel(“时间幻化”)
axes[1].set_ylabel(“温度变化”)
axes[1].set_title(“上海11点到12点的温度变化”)

3、显示图表
plt.show()


折线图的应用场景

折线图是某事物或者某指标随时间的变化状况

plt也可以画函数图像

散点图(scatter)

判断事物之间是否存在某些关系

柱状图

统计/对比

直方图

反应连续数据的分布状况