大家好,我是欧K。我们在用matplotlib绘图时,经常遇到多子图以及辅助标注的情况,本期给大家介绍一下matplotlib中绘制辅助线的两个函数axvline、axhline,希望对你有所帮助。
1. 数据处理
1.1 导入模块
from pylab import mpl import pandas as pd from matplotlib import pyplot as plt import matplotlib.ticker as ticker
1.2 数据指标
读取数据:
mpl.rcParams['axes.unicode_minus']=False mpl.rcParams['font.sans-serif'] = ['SimHei'] df = pd.read_csv('data.csv') df.head()
结果:
指标:V04001: 年V04002: 月V04003: 日V13305: 20-20时降水量V10004_701: 平均气压 V12001_701: 平均气温V13003_701: 平均相对湿度
1.3 日期处理
选取2020.1.10--2020.3.19日期的数据(可自行调整):
# 选择时间范围 a = df[(df['V04001']==2020)&(df['V04002']==1)&(df['V04003']==10)].index.tolist() b = df[(df['V04001']==2020)&(df['V04002']==3)&(df['V04003']==19)].index.tolist() df1 = df.iloc[a[0]:b[0]+1,:] # Temperature temperature = df1['V12001_701'].values # Humidity humidity = df1['V13003_701'].values mon = df1['V04002'].astype(str).values.tolist() day = df1['V04003'].astype(str).values.tolist() # 横坐标年月日 date = [] for i in range(len(mon)): date.append(day[i].rjust(2,'0') + '/' + mon[i].rjust(2,'0') + '/' + '2020')
2. 画图
2.1 温度-湿度图
代码:
# figsize设置整个图布大小 fig, ax = plt.subplots(figsize=(16,8)) ax_sub = ax.twinx() # 绘图 l1, = ax.plot(date, temperature, 'r-', label='temperature') l2, = ax_sub.plot(date, humidity, 'g-', label='humidity') # 放置图例 根据loc的取值(1,2,3,4),放置的位置不一样 plt.legend(handles=[l1, l2], labels=['temperature', 'humidity'], loc=2) ax.set_ylabel('摄氏度(℃)') ax_sub.set_ylabel('百分率(%)') # 横坐标倾斜角度 rotation ax.tick_params( axis='x',rotation = 45) plt.show()
效果:2.2 增加辅助线、调整时间密度
代码:
# figsize设置整个图布大小 fig, ax = plt.subplots(figsize=(16,8)) ax_sub = ax.twinx() # 绘图 l1, = ax.plot(date, temperature, 'r-', label='temperature') l2, = ax_sub.plot(date, humidity, 'g-', label='humidity') # 放置图例 根据loc的取值(1,2,3,4),放置的位置不一样 plt.legend(handles=[l1, l2], labels=['temperature', 'humidity'], loc=2) ax.set_ylabel('摄氏度(℃)') ax_sub.set_ylabel('百分率(%)') # 横坐标倾斜角度 rotation ax.tick_params( axis='x',rotation = 45) # MultipleLocator 调整x轴显示标签的密度 ax.xaxis.set_major_locator(ticker.MultipleLocator(8)) plt.axvline('23/01/2020',linestyle='--',color='black') plt.axvline('07/02/2020',linestyle='--',color='black') plt.axvline('20/02/2020',linestyle='--',color='black') plt.axvline('05/03/2020',linestyle='--',color='black') plt.axhline(humidity.mean(),linestyle='--',color='purple') # y P1标签纵坐标高度 y = 80 plt.text(x='15/01/2020', y=y, s='P1', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='31/01/2020', y=y, s='P2', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='13/02/2020', y=y, s='P3', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='27/02/2020', y=y, s='P4', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='14/03/2020', y=y, s='P5', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.show()
效果:
2.3 增加子图
代码:
# figsize设置整个图布大小 fig, ax = plt.subplots(2,1,figsize=(16,8)) ax_sub = ax[0].twinx() # 绘图 l1, = ax[0].plot(date, temperature, 'r-', label='temperature') l2, = ax_sub.plot(date, humidity, 'g-', label='humidity') # 放置图例 根据loc的取值(1,2,3,4),放置的位置不一样 plt.legend(handles=[l1, l2], labels=['temperature', 'humidity'], loc=2) ax[0].set_ylabel('摄氏度(℃)') ax_sub.set_ylabel('百分率(%)') ax[0].tick_params( axis='x') # MultipleLocator 调整x轴显示标签的密度 ax[0].xaxis.set_major_locator(ticker.MultipleLocator(8)) plt.axvline('23/01/2020',linestyle='--',color='black') plt.axvline('07/02/2020',linestyle='--',color='black') plt.axvline('20/02/2020',linestyle='--',color='black') plt.axvline('05/03/2020',linestyle='--',color='black') plt.axhline(humidity.mean(),linestyle='--',color='purple') # y P1标签纵坐标高度 y = 80 plt.text(x='15/01/2020', y=y, s='P1', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='31/01/2020', y=y, s='P2', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='13/02/2020', y=y, s='P3', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='27/02/2020', y=y, s='P4', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='14/03/2020', y=y, s='P5', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) # Precipitation precipitation = df1['V13305'].values # Pressure pressure = df1['V10004_701'].values ax[1].plot(date, pressure, 'r-', label='precipitation') ax_sub= ax[1].twinx() ax_sub.bar(date, precipitation, color='steelblue', label='pressure', alpha=0.8) # 图例 handles1, labels1 = ax[1].get_legend_handles_labels() handles2, labels2 = ax_sub.get_legend_handles_labels() plt.legend(handles1 + handles2, labels2+labels1 , loc=2) ax[1].set_ylabel('降水(mm)') ax_sub.set_ylabel('气压(pa)') ax[1].tick_params( axis='x') ax[1].xaxis.set_major_locator(ticker.MultipleLocator(8)) plt.axvline('23/01/2020',linestyle='--',color='orange') plt.axvline('07/02/2020',linestyle='--',color='orange') plt.axvline('20/02/2020',linestyle='--',color='orange') plt.axvline('05/03/2020',linestyle='--',color='orange') plt.axhline(15,linestyle='--',color='purple') y = 25 plt.text(x='15/01/2020', y=y, s='P1', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='31/01/2020', y=y, s='P2', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='13/02/2020', y=y, s='P3', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='27/02/2020', y=y, s='P4', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.text(x='14/03/2020', y=y, s='P5', ha='center', va='baseline', fontdict=dict(fontsize=12, color='black', family='monospace', weight='bold')) plt.tight_layout()
效果:
完。
END
以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享让更多人知道。