9

matplotlib.pylab.plot現在、同じ画面に複数のデータセットを表示するために複数回呼び出すコードがあり、Matplotlib はすべてのプロットを考慮して、それぞれをグローバルな最小値と最大値にスケーリングします。その特定のプロットの最小値と最大値に、各プロットを個別にスケーリングするように依頼する方法はありますか?

4

4 に答える 4

3

これに対する直接的なサポートはありませんが、2 つの独立した垂直軸を示すメーリング リストの投稿からのコードを次に示します。

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([])
于 2009-03-15T12:14:35.697 に答える
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
于 2010-07-20T14:46:26.943 に答える
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、numpy 1.8.1、matpotlib 1.3.1 でテスト済みで動作します。日付プロットを重ねて操作するためのきちんとした方法を探して、私はそれをいじり続けるつもりです。調査結果を投稿します。

于 2014-06-10T15:11:38.047 に答える
0

これは日付プロットを使用したソリューションです。2 番目の y 軸を追加するための省略形である twinx() を使用した最も最適化されたソリューションだと思います。

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=None) x 軸を共有する 2 番目の軸を作成します。新しい軸は ax (または ax が None の場合は現在の軸) をオーバーレイします。ax2 の目盛りは右側に配置され、ax2 インスタンスが返されます。詳細はこちら

于 2014-06-11T15:59:00.250 に答える