2009-03-15 19 views
8

私は現在、matplotlib.pylab.plotを複数回呼び出して同じ画面に複数のデータセットを表示するコードを持ち、すべてのプロットを考慮してMatplotlibをグローバルminおよびmaxにスケールします。個々のプロットを独立して、その特定のプロットの最小値と最大値にスケーリングするように求める方法はありますか?Matplotlibで独立したスケーリングを持つ複数の重複プロット

答えて

3

あり、このためには直接的なサポートはませんが、ここでは二つの独立した垂直軸illlustrates mailing list postingからいくつかのコードです:これは、単一のプロットを作成する方法です

x=arange(10) 
y1=sin(x) 
y2=10*cos(x) 

rect=[0.1,0.1,0.8,0.8] 
a1=axes(rect) 
a1.yaxis.tick_left() 
plot(x,y1) 
ylabel('axis 1') 
xlabel('x') 

a2=axes(rect,frameon=False) 
a2.yaxis.tick_right() 
plot(x,y2) 
a2.yaxis.set_label_position('right') 
ylabel('axis 2') 
a2.set_xticks([]) 
+0

元の質問の範囲は、2つの縮尺プロットではなくNの場合と思われます.3つ以上でこれを試してみると(a2、a3などを使用して軸インスタンスを追加する)一度に適切にスケーリングされたデータセットの束全体? – tehwalrus

0

を(add_subplot(1,1,1)) y軸のスケールを制限します。

myFig = figure() 
myPlot = self.figure.add_subplot(1,1,1) 
myPlot.plot([1,2,3,4,5], [5,4,3,2,1], '+r') 
myPlot.set_ylim(1,5) # Limit y-axes min 1, max 5 
0

私はこのようなものが必要ですが、インタラクティブシェルにコピー&ペーストして見てみるという例を作成したかったのです。

from numpy import arange 
from math import sin, cos 
import matplotlib.pyplot as plt 

x = arange(10) 
y1 = [sin(i) for i in x] 
y2 = [10*cos(i) for i in x] 

rect = [0.1, 0.1, 0.8, 0.8] 
a1 = plt.axes(rect) # Create subplot, rect = [left, bottom, width, height] in normalized (0, 1) units 
a1.yaxis.tick_left() # Use ticks only on left side of plot 
plt.plot(x, y1) 
plt.ylabel('axis 1') 
plt.xlabel('x') 

a2 = plt.axes(rect, frameon=False) # frameon, if False, suppress drawing the figure frame 
a2.yaxis.tick_right() 
plt.plot(x, y2) 
a2.yaxis.set_label_position('right') 
plt.ylabel('axis 2') 
a2.set_xticks([]) 

plt.show() 

検査済みとPython 2.7.6、1.8.1 numpyの、matpotlib 1.3.1で動作します。ここでは、実用的なソリューションを必要とするあなたのためのものです。私は、それを使って遊んでいき、重ねて表示された日付のプロットでうまくやっていく方法を探しています。私は私の発見を返信します。

0

ここでは、日付プロットを使用したソリューションです。twinx()を使用して、2番目のy軸を追加するための短い手を使った最適化ソリューションだと思います。ドキュメントから

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import datetime 
import numpy 
numpy.random.seed(0) 
t = md.drange(datetime.datetime(2012, 11, 1), 
      datetime.datetime(2014, 4, 01), 
      datetime.timedelta(hours=1)) # takes start, end, delta 
x1 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 40000 
x2 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 0.002 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
fig.suptitle('a title', fontsize=14) 
fig.autofmt_xdate() 
plt.ylabel('axis 1') 
plt.xlabel('dates') 
ax2 = ax1.twinx() 
ax1.plot_date(t, x1, 'b-', alpha=.65) 
ax2.plot_date(t, x2, 'r-', alpha=.65) 
plt.ylabel('axis 2') 
plt.show() 

、matplotlib.pyplot.twinx(AX =なし) x軸を共有する第二の軸を作ります。新しい軸はax(またはaxがNoneの場合は現在の軸)の上に重なるでしょう。 ax2のティックが右に配置され、ax2インスタンスが返されます。 More here

関連する問題