利用某站点2018年1月的温度数据绘制3y轴图形。数据文件为’wendu.csv’,里面包逐日的日平均温度、日最高温度、日最低温度。
#导入相关模块
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import pandas as pd
def read_file(file_name):
'''
数据处理函数
'''
data_tem=pd.read_csv(file_name)
#转换为时间日期格式
data_tem['time']=pd.to_datetime(data_tem['YYYYMMDD'])
return data_tem
def plot_tem(data_temp):
'''
构造绘图函数
'''
plt.rcParams['font.sans-serif'] = ['simsun'] # 显示中文
fig,ax=plt.subplots() #分离画布对象与绘图区对象
fig.set_size_inches(10,5) #设置图片尺寸,单位为英寸
ax1=ax.twinx() #再设置一个绘图区
ax2=ax.twinx()
f0,=ax.plot(data_temp['time'],
data_temp['Tmean'],
c='k',
ls='-',
marker='o',
ms=2,
lw=1,
mec='k',
mfc='k',
alpha=0.4,
label='Tmean($^\circ$C)')
f1,=ax1.plot(data_temp['time'],
data_temp['Tmax'],
c='r',
ls='-',
marker='o',
ms=2,
lw=1,
mec='r',
mfc='r',
alpha=0.4,
label='Tmax($^\circ$C)')
f2,= ax2.plot(data_temp['time'],
data_temp['Tmin'],
c='b',
ls='-',
marker='o',
ms=2,
lw=1,
mec='b',
mfc='b',
alpha=0.4,
label='Tmin($^\circ$C)')
# ax.plot(data_temp['time'],data_temp['Tmean'],c='k',label='Tmean($^\circ$C)')
# ax1.plot(data_temp['time'],data_temp['Tmax'],c='r',label='Tmax($^\circ$C)')
# ax2.plot(data_temp['time'],data_temp['Tmin'],c='b',label='Tmin($^\circ$C)')
ax.set_title('逐日温度时间序列图',fontsize=15)
ax.set_ylabel('Tmean($^\circ$C)', fontsize=15)
ax1.set_ylabel('Tmax($^\circ$C)',fontsize=15)
ax2.set_ylabel('Tmin($^\circ$C)', fontsize=15)
ax1.grid(True,linestyle=':',linewidth=1,alpha=0.5)
ax1.yaxis.grid(True,which='major',linestyle=':')
ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
#设置坐标轴位置
ax2.spines['right'].set_position(('outward',60))
#设置坐标轴颜色
ax.spines['left'].set_color(f0.get_color())
ax1.spines['right'].set_color(f1.get_color())
ax2.spines['right'].set_color(f2.get_color())
# ax.spines['left'].set_color('k')
# ax1.spines['right'].set_color('r')
# ax2.spines['right'].set_color("b")
#调整坐标轴标签位置
ax2.yaxis.set_ticks_position('right')
#坐标轴标签颜色设置
ax.yaxis.label.set_color(f0.get_color())
ax1.yaxis.label.set_color(f1.get_color())
ax2.yaxis.label.set_color(f2.get_color())
# ax.yaxis.label.set_color('k')
# ax1.yaxis.label.set_color('r')
# ax2.yaxis.label.set_color('b')
#设置刻度文字尺寸
ax.tick_params(labelsize=15)
ax1.tick_params(labelsize=15)
ax2.tick_params(labelsize=15)
#设置坐标轴刻度颜色
ax.tick_params(axis='y',colors=f0.get_color())
ax1.tick_params(axis='y', colors=f1.get_color())
ax2.tick_params(axis='y', colors=f2.get_color())
# ax.tick_params(axis='y', colors='k')
# ax1.tick_params(axis='y', colors='r')
# ax2.tick_params(axis='y', colors='b')
#设置x轴标签旋转角度
for tick in ax.get_xticklabels():
tick.set_rotation(30)
#保存图片
fig.savefig('1月逐日温度序列图1',dpi=400,bbox_inches='tight',pad_inches=0.1)
#关闭图片
plt.close()
return ()
#主程序部分
if __name__=='__main__':
file_name='wendu.csv'
datatemp=read_file(file_name)
plot_tem(datatemp)