任务描述
本关任务:读取 “各站点各时刻进出站客流数据.xlsx”,将 155、157、151、123 四个站点在各时刻的进站客流,用一个 2*2 的子图,绘制其线性图。
相关知识
为了完成本关任务,你需要掌握:1.如何读取数据和切片,2.如何绘制子图。
读取数据并切片
data=pd.read_excel('各站点各时刻进出站客流数据.xlsx')
#获取站点155,157,151,123各时刻进站人数
intf155=data.loc[data['站点编号']==155,['站点编号','时刻','进站人数']]
输出:
绘制子图
子图是指在同一个绘图界面上,绘制不同类型的图像。通过子图,可以在同一个界面上实现多种不同类型图像之间的比较,从而提高了数据的可读性和可视化效果。subplot()函数,其调用形式为将figure画布分成a行b列矩阵形式的方格图形,并在第c个方格图形(按行顺序数)上绘制图像。注意:绘制子图时可能存在坐标轴距直接重叠,可以使用排版设置tight_layout()函数自动调整子图参数。 示例如下:
#绘制2*2的子图
#绘制第一个子图,站点155
plt.subplot(2,2,1)
#定义x1,y1
x1=intf155.iloc[:,1]
y1=intf155.iloc[:,2]
#绘制线性图
plt.plot(x1,y1)
#设置x,y轴标签
plt.xlabel('时刻')
plt.ylabel('进站人数')
#第一个子图标题
plt.title('155各时刻进站客流')
#排版设置
plt.tight_layout()
输出:
编程要求
根据提示,在右侧编辑器补充代码,并绘制出子图。
测试说明
平台会对你编写的代码进行测试:
开始你的任务吧,祝你成功!
import matplotlib.pyplot as plt
import pandas as pd
import warnings
plt.rcParams['font.sans-serif']=['simhei']
plt.rcParams['font.family']='sans-serif'
warnings.filterwarnings('ignore')
#********** Begin *****
#读取“各站点各时刻进出站客流数据.xlsx”,获得 155、157、151、123
#四个站点在各时刻的进站客流,用一个 2*2 的子图,绘制其线性图。
def plot_data(station_id, subplot_id):
intf = data.loc[data['站点编号']==station_id,['时刻','总进站客流']]
plt.subplot(2,2,subplot_id)
plt.plot(intf.iloc[:,0], intf.iloc[:,1])
plt.xlabel('时刻')
plt.ylabel('总进站客流')
plt.title(f'{station_id}各时刻进站客流线性图')
plt.tight_layout()
data = pd.read_excel('各站点各时刻进出站客流数据.xlsx')
plt.figure(figsize=(6,4))
def test():
plot_data(155, 1)
plot_data(157, 2)
plot_data(151, 3)
plot_data(123, 4)
plt.savefig("学员4.7/4个站点各时刻进站客流子图.png")
#最后,采用plt.savefig函数保存图片,文件路径如下:"学员4.7/4个站点各时刻进站客流子图.png"
#********** End **********#