如何在matplotlib图上绘制一个框架

时间:2017-08-09 08:14:41

标签: python pandas matplotlib time-series

我想在此图中显示框架。 enter image description here 我尝试运行下面的代码,但它没有用:

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

重点是你似乎正在使用seaborn或至少是seaborn darkgrid风格。如果确实需要这样,但你仍然需要围绕轴的边框,则需要更改样式。

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

这是this answer中解释的(如@Wli提及)。

这完全独立于tight_layoutplt.tight_layout()产生错误的原因无法通过手头的信息确定。但是,在GUI中使用pyplot调用图的方法通常会更好。因此,您可以尝试使用self.canvas.figure.tight_layout()