2017-08-09 184 views
1

我想在此圖中顯示框架。 enter image description here 我試圖運行下面的代碼,但它沒有工作:如何在matplotlib上繪製框架圖

ax = self.canvas.figure.add_subplot(111) 
ax.spines['top'].set_visible(True) 
ax.spines['right'].set_visible(True) 
ax.spines['bottom'].set_visible(True) 
ax.spines['left'].set_visible(True) 
ax.plot(diff) 

我也試過:

plt.tight_layout() 

,但它會產生這個錯誤:

> File "runme.py", line 54, in autocorr_function 
>  plt.tight_layout() File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 
> 1406, in tight_layout 
>  fig.tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect) File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", 
> line 1753, in tight_layout 
>  rect=rect) File "/usr/local/lib/python2.7/dist-packages/matplotlib/tight_layout.py", 
> line 326, in get_tight_layout_figure 
>  max_nrows = max(nrows_list) ValueError: max() arg is an empty sequence 

您的幫助,將不勝感激, 謝謝。

編輯:這裏是帆布的代碼:

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 

import matplotlib.pyplot as plt from PyQt4 import QtGui 

class Canvas(FigureCanvas): 

    def __init__(self, parent=None): 
     self.figure = plt.figure()  #plt.tight_layout(pad=4) 
     FigureCanvas.__init__(self, self.figure) 
     self.setParent(parent) 
     FigureCanvas.setSizePolicy(self, 
           QtGui.QSizePolicy.Expanding, 
           QtGui.QSizePolicy.Expanding) 
     FigureCanvas.updateGeometry(self) 
+1

看起來你不是在一個孤立的matplotlib圖中繪製圖,而是在一些GUI的畫布內。我們需要更多信息。 tight_layout是一種在數字框架內伸展軸的圖形方法,它不是關於邊框。 – Wli

+0

我添加了畫布的代碼,希望它更清晰。 –

+0

你需要什麼畫布?爲什麼不使用plt.plot來繪製它(...) – 2Obe

回答

3

的邊界(或刺)已經顯現,但白。您需要更改的顏色在此響應解釋:https://stackoverflow.com/a/43265998/1773344

例如,對於某種灰色:

ax.spines['bottom'].set_color('0.5') 
ax.spines['top'].set_color('0.5') 
ax.spines['right'].set_color('0.5') 
ax.spines['left'].set_color('0.5') 

如果你想繞軸的邊界,沒有簡單的解決方案。除了可能把你的座標軸放在一個具有調整邊界的座標軸之外,部分解釋如下:https://stackoverflow.com/a/22608025/1773344

2

主要的一點是你似乎在使用seaborn或者至少是seaborn的darkgrid風格。如果確實需要這樣做,但您仍然需要圍繞座標軸的邊框,則需要更改樣式。

plt.rcParams["axes.edgecolor"] = "black" 
plt.rcParams["axes.linewidth"] = 1 

這是(如@Wli提到的)在this answer中解釋的。

這全是獨立於tight_layoutplt.tight_layout()產生顯示的錯誤的原因無法確定與手頭的信息。但是,在GUI中使用pyplot的方法通常可以比使用圖的方法更好。所以你可以試試self.canvas.figure.tight_layout()