必要的参数
- 数据集 x,y
- 画布
- 作图
- 显示
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)
添加描述信息,标题之类的
- plt.xlabel(x轴信息)
- plt.ylabel(y轴信息)
- 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)对象,返回一个fig和axes对象,对应就是画布和坐标系对象。可以在后面操作这两个对象去进行一些修改。
这里的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
Comments | NOTHING