必要的参数

  1. 数据集 x,y
  2. 画布
  3. 作图
  4. 显示
import matplotlib.pyplot as plt
import numpy as np
import random
#创建画布
plt.figure(figsize=(10,10) , dpi = 50)

# 绘制折线图
x = np.array([1,2,3,4,5,6,7])
y = np.array([15,16,9,21,10,11,22])

# x = [1,2,3,4,5,6,7]
# y = [15,16,9,21,10,11,22]
# 纯列表不行
plt.plot(x,y)

# 显示图像
plt.show()

中文问题

# 设置中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] =False

修改x,y轴刻度

需要注意的是修改刻度要放在作图的后面,而且对于含有中文集合的刻度需要搭配相应数量的数字集合

plt.xticks(数字集合,中文集合),长度不用一致

  • 数字集合长度 > 中文集合长度
    会自动空缺出来
  • 数字集合长度 < 中文集合长度
    只延伸到数字集合长度,后面的部分自动省略

那么可以大概想象出修改中文刻度的步骤,其实是先将刻度变为数字集合,然后在讲中文集合替换掉数字集合中的数字。

# 数据集
x = np.arange(60)
y = [random.uniform(15,18) for i in x]

# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = np.arange(40)

# 画布
plt.figure(figsize=(20,8),dpi=100)
# 作图
plt.plot(x,y)
# 修改刻度
plt.xticks(x[::5],x_ticks_label)
plt.yticks(y_ticks[::5])
# 显示
plt.show()

背景添加网格

# 绘制表格
plt.grid(True,linestyle="--",alpha=0.5)

添加描述信息,标题之类的

  1. plt.xlabel(x轴信息)
  2. plt.ylabel(y轴信息)
  3. plt.title(图像标题,fontsize=20)
在上面的例子中的作图后面加上代码
# 添加图像信息
plt.xlabel("天数")
plt.ylabel("温度")
plt.title("地区-温度 图",fontsize=20)

图片保存(注意要放在show()前面)

因为plt.show()不仅是显示图像,还有释放资源之类的操作

plt.savefig(path)
# 绝对和相对应该都可以

一个坐标系下绘制多个图像

在plt.plot()部分做多个图就行了,可以设置不同的颜色和线条类型linestyle。

颜色 字符风格字符
r 红色- 实线
g 绿色-- 虚线
b 蓝色-. 点划线
w 白色: 点虚线
c 青色' ' 留白、空格
k 黑色
y 黄色
x = np.arange(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(5,8) for i in x]
"""
省略。。。
"""
# 作多个图
plt.plot(x,y_shanghai,color='blue')
plt.plot(x,y_beijing,color='r')

添加图例

添加图例要在plt.plot()中写上 label = "图例名" 这个参数,然后在plt.show()前一定要加上plt.legend(loc=样式)才能正常显示图例

多个坐标系下绘制多个图像

使用的是plt.subplots(nrows=行数, ncols=列数, figsize=(20,8) , dpi = 100)对象,返回一个figaxes对象,对应就是画布坐标系对象。可以在后面操作这两个对象去进行一些修改。

这里的axes对象感觉很像单个坐标系下的plt,主要代码很类似,单个坐标系下都是plt在操作,而多图下都是axes在操作,前面大都加了set_。最终的显示还是用plt.show()

# 数据集
x = np.arange(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(5,8) for i in x]

# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = np.arange(40)

# 画布
# plt.figure(figsize=(20,8),dpi=100)
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)

# 作图
# plt.plot(x,y_shanghai,color='blue',label="上海")
# plt.plot(x,y_beijing,color='r',label="北京")
axes[0].plot(x,y_shanghai,color='c',label="上海")
axes[1].plot(x,y_beijing,color='r',label="北京")
# 修改刻度
# plt.xticks(x[::5],x_ticks_label,fontsize=18)
# plt.yticks(y_ticks[::5],fontsize=18)
# ========第一个图的刻度修改========
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])
# 添加图像信息
# ========第一个图像信息修改========
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点-12点上海温度变化图",fontsize=20)
# ========第二个图像信息修改========
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点-12点北京温度变化图",fontsize=20)
#网格
# plt.grid(linestyle="--",alpha=0.5)
axes[0].grid(linestyle="--",alpha=0.5)
axes[1].grid(linestyle="--",alpha=0.5)
# 显示图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 显示
plt.show()

小结

单图代码多图代码
创建画布plt.figure(*args)fig , axes = plt.subplots(*args)
作图plt.plot(x,y)axes[i].plot(x,y)
x轴刻度plt.xticks(集合)axes[i].set_xticks(集合)
中文刻度plt.xticks(数字集合,
中文集合)
axes[i].set_xticks(数字集合)
axes[i].set_xticklabels(中文集合)
x轴标题plt.xlabel(标题)axes[i].set_xlabel(标题)
大标题plt.title(大标题)axes[i].set_title(大标题)
网格plt.grid(*args)axes[i].grid(*args)
图例显示plt.legend(loc=0)axes[i].legend(loc=0)

关于figsize和dpi对应图形大小的关系

figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
dpi 为设置图形每英寸的点数
则此时图形的像素为:px, py = a*dpi, b*dpi # pixels


所念皆星河