Вопрос:
Я хочу показать рамку на этом рисунке. Я попробовал запустить код ниже, но он не работал:
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
Ваша помощь будет оценена, спасибо.
EDIT: Здесь код холста:
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
Границы (или шипы) уже видны, но белые. Вам необходимо изменить цвет, как описано в этом ответе: qaru.site/questions/6773382/…
пример для какого-то серого:
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’)
Если вы хотите, чтобы границы были вокруг осей, нет простого решения. Кроме того, что, возможно, вы поместите свою ось внутри оси с скорректированными границами, как это частично объясняется в этом ответе: qaru.site/questions/966323/…
Ответ №2
Главное, что вы, кажется, используете морские или, по крайней мере, морские темные стили. Если это действительно необходимо, но вы все еще хотите границу вокруг осей, вам нужно изменить стиль.
plt.rcParams[«axes.edgecolor»] = «black» plt.rcParams[«axes.linewidth»] = 1
Это (как @Wli упоминает) объясняется в этом ответе.
Все это не зависит от tight_layout. Причина, по которой plt.tight_layout() вызывает показанную ошибку, не может быть точно определена с помощью имеющейся информации. Однако, как правило, лучше использовать метод цифр, чем использовать pyplot в графическом интерфейсе. self.canvas.figure.tight_layout() вы можете попробовать self.canvas.figure.tight_layout().