Обновление / удаление цветовой панели matplotlib разрушает макет осей - PullRequest
1 голос
/ 08 мая 2019

У меня есть matplotlib, встроенный в графический интерфейс tkinter.С помощью функции тепловой карты seaborn я создаю тепловую карту и цветовую панель, которая работает так, как я хочу при создании первого графика.Однако, если я нанесу график снова, это не перезапишет цветную полосу, но добавит другую цветную полосу к моей фигуре.Таким образом, я получаю множество цветовых полос.

Фигура, которую я создаю для графика, содержит две оси:

[<matplotlib.axes._subplots.AxesSubplot object at 0x000001F36C8C3390>, <matplotlib.axes._subplots.AxesSubplot object at 0x000001F36D6ABF98>]

первая - это сам график, а вторая - цветовая полоса и внешний вид.например: сюжет 1

Если я построю график снова, результат будет следующим: сюжет 2

Простое удаление цветовой шкалы с помощью

self.fig.axes[1].remove()

перед созданием следующего графика не работает, потому что он просто удалит цветную полосу, но компоновка графика продолжает уменьшаться:

сюжет 3 сюжет 4

Обратите внимание, что размер рисунка остается тем же, но размер графика продолжает уменьшаться, когда я снова строю график, и цветовая полоса перемещается дальше влево, в то время как вся правая часть графика остается белой.

Когда я создаю графический интерфейс tkinter, окно печати инициализируется при первом запуске программы.

self.fig = plt.figure.Figure( facecolor = "white", figsize = (7,4)) 

          self.ax = self.fig.subplots()

          self.x_data = x_data
          self.y_data = y_data

когда кто-то нажимает кнопку графика, график создается

    def plot_on_plotframe(self):
        self.ax.cla()

        #executes required matplotlib layout
        self.plotlayout[self.plot_type]()

        print('plottype: {}'.format(self.plot_type))       
        #print('Plot xdata: {}'.format(self.x_data))
        self.canvas.draw()

Мне нужно сделать разные типы сюжета и рТип roper выбирается plotlayout:

        self.ax = sns.heatmap(self.x_data, vmin=self.settings[2][0], vmax=self.settings[2][1], cmap='viridis', fmt=self.settings[0], annot=self.settings[1], linewidths=0.5, annot_kws={'size': 8}, ax = self.ax)

        self.ax.set_xticklabels(self.ax.get_xticklabels(), rotation=0)
        self.fig.tight_layout()

Было бы замечательно, если бы кто-нибудь мог сказать мне, почему matplotlib портится с макетом, даже после того, как я в первую очередь удаляю старую цветовую панель.Я думаю, что это как-то связано с gridSpec, но я не понимаю, как сказать matplotlib для правильного сброса макета.Также есть еще какие-нибудь предложения о том, как это восстановить?

Заранее спасибо

...