簡體   English   中英

在matplotlib中用兩個Y軸(兩個單位)繪制單個數據

[英]Plot single data with two Y axes (two units) in matplotlib

我正在嘗試繪制單個時間序列,但想要在左右軸上以兩個單位表示它。 這是我到目前為止所做的。

fig, ax1 = plt.subplots()
t = np.arange(1,50,1)
s1 = np.sin(t)*20000+40000 #synthetic ts, but closer to my data 
ax1.plot(t, s1, 'b-')

ax1.set_xlabel('time')
ax1.set_ylim(20000,70000)
ax1.set_ylabel('km3/year')

km3yearToSv=31.6887646*(1/1e6)

ax2 = ax1.twinx()
s2 = s1*km3yearToSv
ax2.plot(t, s2, 'b-')
ax2.set_ylim(20000*km3yearToSv,70000*km3yearToSv)
ax2.set_ylabel('Sv')

在此輸入圖像描述

通過調整ylim(),我可以將它看作單行,但可以看到一些別名。 如果我不必兩次繪制數據,我更願意。

有什么建議?

更新:謝謝,askewchan,完美的解決方案!

沒有必要繪制兩次,這應該給你想要的結果:

ax2 = ax1.twinx()
ax2.set_ylim(20000*km3yearToSv, 70000*km3yearToSv)
ax2.set_ylabel('Sv')

一個更健壯的方法是首先提取繪圖的限制(如果你更改它們,它們不再是2000070000 ,或者你希望繪圖能夠自動調整限制:

ax2 = ax1.twinx()
mn, mx = ax1.get_ylim()
ax2.set_ylim(mn*km3yearToSv, mx*km3yearToSv)
ax2.set_ylabel('Sv')

一個情節

總而言之,還有其他一些小調整:

import numpy as np
import matplotlib.pyplot as plt

mean, amp = 40000, 20000
t = np.arange(50)
s1 = np.sin(t)*amp + mean #synthetic ts, but closer to my data 

fig, ax1 = plt.subplots()
ax1.plot(t, s1, 'b-')

ax1.set_xlabel('time')
mn, mx = ax1.set_ylim(mean-amp, mean+amp)
ax1.set_ylabel('km$^3$/year')

km3yearToSv = 31.6887646e-6

ax2 = ax1.twinx()
ax2.set_ylim(mn*km3yearToSv, mx*km3yearToSv)
ax2.set_ylabel('Sv')

上面代碼中的一個小錯誤:

mn, mx = ax2.get_ylim()

應該:

mn, mx = ax1.get_ylim()

根據原始尺度縮放新的輔助軸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM