3

行数が固定されているが、行ごとに列数が異なるプロットを作成しようとしています。プロットに使用するコードは次と同等です。

import matplotlib.pyplot as pl
pl.figure()
pl.ion()
pl.subplot(2,1,1)
pl.title("Sets the title for top plot")

plotData(data[0]) # Function that plots data in this first row

for i in range(3):
    pl.subplot(2,3,4+i)
    pl.title("Sets the title of each subplot in second row")
    plotData(data[i+1]) # Plots the data in second row

何らかの理由で、2 行目のサブプロットにプロットされたデータが消えます。デバッグすると、for ループ内の plotData() 関数から戻るまで (または、次のサブプロット コマンドを呼び出したときに) そこにあるように見えますが、これは最後のサブプロットが空である理由を説明していません ...)。

編集:

plotData()関数の最後に問題を引き起こしたコードがありました。

pl.gca().set_xlim(0,15)
pl.gca().set_ylim(0,15)

これは、データをプロットした後に x、y 制限を設定できないということですか、それともここで何が間違っているのでしょうか?

問題を示す最小限の例のペーストビンは、ここにあります

4

2 に答える 2

1

わかりました、それは恥ずかしかったです。Pastebin のコードを見ると、問題は、設定した xlim と ylim が、座標系の方向 (y 方向) を切り替えたという事実を考慮していないことでした。でplotData()

for i,dset in enumerate(data):
    x = np.array([point['x'] for point in dset])
    y = np.array([-point['y'] for point in dset])

私の呼び出しは、彼らが想定しset_xlimset_ylimいたことを正確に実行しました。設定した制限により、データがこれらのプロットに表示されなくなっただけでした(制限ではなくデータのy軸の符号を切り替えたため) .

于 2013-01-25T08:37:37.473 に答える
0

@Zhenyaに同意します-この機能は最新のmatplotlib(開発バージョン1.3-devであり、少なくともv1.2.0で修正されていると思われますが、おそらくv1.0.1でさえ修正されていると思われます)。

HTH、

更新: mpl v1.2.0 からの出力を追加:

> python
Python 2.7.2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> print matplotlib.__version__
1.2.0
>>> 
>>> import matplotlib.pyplot as plt
>>> 
>>> plt.ion()
>>> 
>>> plt.subplot(2,1,1)
<matplotlib.axes.AxesSubplot object at 0x283d790>
>>> plt.title("Sets the title for top pltot")
<matplotlib.text.Text object at 0x2851f50>
>>> 
>>> plt.plot(range(10, 0, -1))
[<matplotlib.lines.Line2D object at 0x2c40790>]
>>> 
>>> for i in range(3):
...     plt.subplot(2,3,4+i)
...     plt.title("Sets the title of each subplot in second row")
...     plt.plot(range(10))
... 
<matplotlib.axes.AxesSubplot object at 0x2c40e90>
<matplotlib.text.Text object at 0x2c64a90>
[<matplotlib.lines.Line2D object at 0x2c6e990>]
<matplotlib.axes.AxesSubplot object at 0x2c6ec10>
<matplotlib.text.Text object at 0x2e6c810>
[<matplotlib.lines.Line2D object at 0x2e78110>]
<matplotlib.axes.AxesSubplot object at 0x2e78390>
<matplotlib.text.Text object at 0x2e8ced0>
[<matplotlib.lines.Line2D object at 0x2e98610>]

出力

于 2013-01-23T11:23:16.937 に答える