Matplotlib:为什么绘图总是封闭的形状?

Matplotlib: why are plots always closed shapes?

在 Python 2.7.

中使用 1.5.1

我正在创建一个图形,向其添加一个轴对象,创建一个 canvas,然后将其放入 window。为了绘制一个简单的图形,我在轴对象中设置了 X 和 Y 的限制,然后使用一个 numpy 值范围和一个相同长度的 y 值数组以及一些格式选项调用 plot 成员函数。

我得到的是一张很好的数据图表,但它被绘制为一条闭合曲线,这意味着有一条对角线从我的图表的末尾回到开头。

为什么要这样做?当 X 值不是单调递增时(例如,绘制多边形),我可以看到执行此操作的选项的偶尔效用,但这似乎不是一个合理的默认值。我没有看到任何会影响此的轴属性或任何绘图参数。有谁知道怎么让它不这样缠绕?

编辑:这里是一些示例代码。它假定 PyGTK 作为 GUI 环境:

import numpy
import gtk
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas

class junk:

    def __init__(self):

        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect('destroy', self.destroy)
        self.window.set_title('junk')
        self.window.resize(400, 400)

        self.figure = Figure()
        self.axes = self.figure.add_axes((0, 0, 1, 1))
        self.canvas = FigureCanvas(self.figure)
        self.canvas.show()

        self.window.add(self.canvas)

        self.axes.set_xlim(-10, 12)
        self.axes.set_ylim(-1, 122)
        x = numpy.arange(-9, 12)
        self.axes.plot(x, x * x, linestyle = 'solid')

        self.canvas.draw()

        self.window.show_all()

    def destroy(self, widget, data = None):

        gtk.main_quit()

    def main(self):

        gtk.main()

if __name__ == '__main__':

    app = junk()
    app.main()

这显示了一条偏心抛物线,结果如下所示:

现在将 Y 的下限从 -1 更改为 1,这样它会稍微夹住底部,结果如下所示:

这表明如果需要多条路径来绘制图形,则每条路径都有虚假环绕。

我在 Windows 上这样做,但几年前 运行 在 Gumstix SOM 运行 Linux.[=13 上我遇到了同样的问题=]

我无法使用给定的代码重现您的问题

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(-9, 12)
ax.plot(x, x*x)
plt.show()

按照您传入的顺序在点之间绘制一条线。这是您可以使用不是 x 的严格函数来绘制事物的行为。

BrenBarn 在对原始 post 的评论中确定了解决方案:使用 GTKAgg 后端而不是 GTK 后端。谢谢。