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

现在由于某种原因,绘制在第二行子图中的数据消失了。当我调试它时,它似乎一直存在,直到从 for 循环中的 plotData() 函数返回(或者可能在调用下一个子图命令时 - 但这并不能解释为什么最后一个子图为空......)。

编辑:

plotData()触发问题的函数末尾有代码:

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

这是否意味着我在绘制数据后无法设置 x、y 限制,或者我在这里做错了什么?

可以在此处找到显示问题的最小示例的 pastebin

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 中)。

高温下,

更新:添加了 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 回答