2015-09-18 10 views
5

私は1つの時系列をプロットしようとしていますが、左右の軸に2つの単位で表現したいと考えています。これまで私が行ってきたことは次のとおりです。 (YLimプロパティを調整することによりmatplotlibで2つのY軸(2単位)を持つ単一データをプロットする

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') 

enter image description here

)、私はそれは、単一の線として思えることを得ることができますが、いくつかのエイリアシングを見ることができます。データを2回プロットする必要がない場合は、私は好きです。

提案がありますか?

更新:ありがとうございました、完璧な解決策はaskewchan!二回、それをプロットする必要はありません

+0

スクリプト全体を含めることはできますか? – Leb

答えて

5

、この多くは、あなたが望む結果を与える必要があります。

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

をそれを行うには、より堅牢な方法は、最初のケースでは(あなたのプロットの限界を抽出することですそれらを変更しない、と彼らはもはや2000070000だか、プロットが自動的に制限を調整することができるようにしたい:

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

one plot

すべて一緒に、いくつかの小さな微調整を別の場所で:

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') 
関連する問題