Как нарисовать рамку на фигуре matplotlib

Python
Вопрос: Я хочу показать рамку на этом рисунке. Я попробовал запустить код ниже, но он не работал: 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)

Вопрос:

Я хочу показать рамку на этом рисунке. 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

Ваша помощь будет оценена, спасибо.

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().

Оцените статью
Добавить комментарий