matplotlib 雙座標 曲線 不同步

今天才發現這個問題,兩條曲線的數據是一致的,但是畫出來卻不同步,存在錯位,如下圖所示:

對應的Code:

def plot_deflection_local(name,label,data_frame):
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['figure.dpi'] = 200
    fig,axs = plt.subplots(1,1)
    axs.set(xlabel='日期',ylabel='撓度 (mm)',title=name)
    local_max_value = data_frame['Val'][start_index:end_index].max()
    local_min_value = data_frame['Val'][start_index:end_index].min()
    axs.yaxis.set_ticks(np.linspace(local_min_value,local_max_value,8,endpoint=True))
    deflection = axs.plot(data_frame['Val'][start_index:end_index],color='deepskyblue',linestyle='-',label='撓度',linewidth=0.7,alpha=0.8)
    axs.axhline(local_max_value,color='r',ls='--',lw=0.8)
    axs.axhline(local_min_value,color='g',ls='--', lw=0.8)
    axs.grid()
    #plt.xticks(pd.date_range(start=start_index,end=end_index,freq='20D'),pd.date_range(start=start_index,end=end_index,freq='20D').astype(str))
    ax2=axs.twinx()#這是雙座標關鍵一步
    temperature = ax2.plot(data_frame['Temp'][start_index:end_index],color='orange',linestyle='-',label='溫度',linewidth=0.7,alpha=0.8)
    ax2.set(ylabel=r'溫度 ($^\circ$C)')
    plt.xticks(pd.date_range(start=start_index,end=end_index,freq='20D'),pd.date_range(start=start_index,end=end_index,freq='20D').astype(str))
    lines_plot = deflection+temperature
    plt.legend(lines_plot, ['撓度','溫度'],loc='lower center', fancybox=True, bbox_to_anchor=(0.5, -0.25),shadow=False, ncol=5)
    fig.tight_layout()
    plt.savefig(img_path+label+'_local.png')

懷疑是

plt.xticks(pd.date_range(start=start_index,end=end_index,freq='20D'),pd.date_range(start=start_index,end=end_index,freq='20D').astype(str))

這段代碼的位置錯了,讓後調整到ax2=axs.twinx() 之前,結果也驗證了猜想:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章