2016-05-24 30 views
0

在Python 2.7中使用1.5.1。Matplotlib:为什么地块总是封闭的形状?

我正在创建一个图形,向它添加一个轴对象,创建一个画布,并将其放入一个窗口中。为了绘制一个简单的图形,我在轴对象中设置了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() 

这将显示偏心抛物线,其结果如下所示:

enter image description here

现在改变下Y边界从-1到1 ,所以它的剪辑底部的小,结果是这样的:

enter image description here

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

我在Windows上这样做,但几年前,我在运行Linux的Gumstix SOM上运行同样的问题。

+1

请提供一个显示问题的示例程序。 –

+0

这确实需要MWE - 我从未见过例如'plot([0,1,1],[0,0,1])'创建一个闭合曲线(在这种情况下,从'x,y = {1,1}'到'x,y = {0,0}' – Bart

+0

我已经将此作为编辑提供给原始文章 –

回答

0

BrenBarn在注释中标识了原始帖子中的解决方案:使用GTKAgg后端而不是GTK后端。谢谢。

0

我不能再现与给定的代码

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() 

simple plot

线路在顺序点之间绘制你的问题,你在通过他们,这是行为,所以你可以画出的东西与x不是严格的函数。

+0

这是真的,它不显示您的代码的问题,但如果我尝试与实际的代码张贴,我看到错误。它似乎是后端特定的。 – BrenBarn