yjs04——matplotlib的使用(多个坐标图)
1.多个坐标图与一个图的折线对比
1.引入包;字体(同)
import matplotlib.pyplot as plt
import random
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
2.创建幕布
2.1建立图层幕布
一个图:plt.figure(figsize=(...,...),dpi=...)
不同图层:
my_fig, axes = plt.subplots(nrows=xx, ncols=xx, figsize=, dpi=...) ..................................................................................
2.2数据准备(同)
x = range(1, 15) #x坐标轴的刻度
x_label = ["10月{}日".format(i) for i in x] #x坐标的写法
y = range(5,25) #y坐标轴的刻度
y_shanghai = [random.uniform(15, 20) for i in x] #折线的y值
y_beijing = [random.uniform(10, 15) for i in x]
·······················································································································2.3画折线
一个图:plt.plot(x,y_shanghai,label="",color="..",linestyle....)
plt.plot(x,y_beijing,...color="",...)
多个图:
axes[i].plot(x, y_shanghai, label=..., color=...) 或 axes[i][j].plot(x, y_shanghai, label=....) ..................................................................................2.4画坐标
一个图:plt.xticks(x,x_label)
两个图:
axes[i][j].set_xticks(x) axes[i][j].set_xticklabels(x_label,rotation=45) axes[i][j].set_yticks(y) #这里就是一个一个的写,刻度和名称分开的,一个图里是用一个函数的参数位置区分,这里是不同函数分开传2.5添加其他信息
一个图:plt.xlabel();
plt.ylabel();
plt.title()
多个图: axes[i][j].set_xlabel("日期") axes[i][j].set_ylabel("温度") axes[i][j].set_title("上海15日内的天气变化")···················································································································
2.6添加图例(都要在画折线的时候加label)
一个图:plt.legend(loc=0)
多个图:
axes[i][j].legend(loc=1) #这里不是set_legend!看好了!2.7添加网格
一个图:plt.grid(True,alpha=0.5)
多个图:
ax[i][j].grid(True,alpha=0.5)..............................................................................................................................................
3.展示图像(同)
plt.show()
2.代码展示
# matplotlib 拆成不同坐标轴;拆到不同的图里
import matplotlib.pyplot as plt
import random
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 1.创建画布
# 在一个图里画创建画布 plt.figure(figsize=(80, 20), dpi=50)
m_fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(40, 60), dpi=90)
# 准备数据(与原来一样)
x = range(1, 15)
y=range(5,25)
y_shanghai = [random.uniform(15, 20) for i in x]
y_beijing = [random.uniform(10, 15) for i in x]
x_label = ["10月{}日".format(i) for i in x]
# 2.画图
# 添加折线
# plt.plot(x,y_shanghai);plt.plot(x,y_beijing)
ax[0][0].plot(x, y_shanghai, label="上海", color="b", linestyle="-")
ax[1][0].plot(x, y_beijing, label="北京", color="r", linestyle="--")
# 添加坐标轴
# 一个图中建立坐标轴是 plt.xticks(x,x_label,....);plt.yticks()
ax[0][0].set_xticks(x)
ax[0][0].set_xticklabels(x_label,rotation=45)
ax[0][0].set_yticks(y)
ax[1][0].set_xticks(x)
ax[1][0].set_xticklabels(x_label,rotation=45)
ax[1][0].set_yticks(y)
# 添加其他信息
# plt.xlabel("时间");plt.ylabel("温度");plt.title("15日内温度变化")
ax[0][0].set_xlabel("日期")
ax[0][0].set_ylabel("温度")
ax[0][0].set_title("上海15日内的天气变化")
ax[1][0].set_xlabel("日期")
ax[1][0].set_ylabel("温度")
ax[1][0].set_title("北京15日内的天气变化")
# 添加图例
# plt.legend(loc=0)
ax[0][0].legend(loc=1)
ax[1][0].legend(loc=1)
#添加网格
ax[0][0].grid(True,alpha=0.5)
ax[1][0].grid(True,alpha=0.5)
# 3.展示
plt.show()
我的问题:
1.对于fig,axes=plt.subplots(nrows=,nlows=,...)不太理解
首先是fig,axes这两个是你的幕布和坐标轴“名字”,下面坐标轴会用axes[i][j]来指定
其次nrows是有几行,nlows是有多少列,如果只有两个坐标,那么下面在说坐标轴时用一维数组来描述即可,即axes[0]与axes[1],但是如果有四个的话,要用axes[0][0],axes[0][1]....来指明
2.画坐标的时候的传参问题
一个图的坐标可以参数不写,然后会给你自动带入相应的值,但是多个图时必须传参;如plt.yticks()这里就可以不穿,但是axes[0].set_yticks(y)这里就得穿,要不然报错
3.图例那里 不是set_legend(),是axes[i].legend()看好了,别顺手写了!