2017-08-09 123 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()