2016-05-24 55 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