Почему фигура matplotlib окрашена в цвета панели цветов - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь построить точечный график, встроенный в tkinter, и обновить его с помощью цикла for.Я могу обновить свой сюжет;однако, когда моя программа инициализирует график, некоторая часть рисунка покрывается цветом цветовой шкалы.Вот мой код:

import matplotlib as mtpl
import matplotlib.pyplot as plt
import numpy as np
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from mpl_toolkits.axes_grid1 import make_axes_locatable
mtpl.use("TkAgg")

class RealTime(object):

def __init__(self, master):

    self.master = master
    self.lf = tk.LabelFrame(self.master, text="Plot")
    self.lf.grid(row=0, column=0, padx=3, pady=3)

    plt.ion()
    self.fig = plt.Figure()
    self.axis = self.fig.add_subplot(111)

    data = np.arange(2, 0, -0.1).reshape(5, 4)
    divider = make_axes_locatable(self.axis)
    self.cax = divider.append_axes('right', size='3%', pad=0.4, add_to_figure=True)
    im = self.axis.imshow(data, cmap="GnBu")
    self.fig.colorbar(im, cax=self.cax, orientation='vertical')

    self.axis.set_xlim(-1, 1)
    self.axis.set_ylim(-1.65, 1.65)
    self.axis.set_xlabel('Y-Direction')
    self.axis.set_ylabel('X-Direction')
    self.axis.set_title("Real Time Position")
    self.canvas = FigureCanvasTkAgg(self.fig, master=self.lf)
    self.canvas.get_tk_widget().grid(row=0, column=0, padx=3, pady=3)
    self.canvas.draw()
    self.master.protocol("WM_DELETE_WINDOW", self.on_closing)


def plot(self, data):
    s = self.axis.scatter(data[:, 0], data[:, 1], s=10, c=data[:, 2], cmap=plt.get_cmap("GnBu"), vmin=0, vmax=2)
    self.axis.legend(['Position'])
    self.fig.canvas.draw()
    self.fig.canvas.flush_events()

Моя программа выводит это: enter image description here

Знаете ли вы, что моя фигура окрашена в цвета цветовой полосы?С наилучшими пожеланиями

РЕШЕНИЕ Добавление self.axis.cla() после добавления цветовой шкалы решает проблему.Но я все еще не понимаю, почему у меня было такое поведение раньше?

1 Ответ

0 голосов
/ 20 ноября 2018

В строке

im = self.axis.imshow(data, cmap="GnBu")

вы наносите изображение на оси.Это изображение показано на осях и, вероятно, является желательным.Если вы удалите линии

self.axis.set_xlim(-1, 1)
self.axis.set_ylim(-1.65, 1.65)

Результат будет выглядеть как

enter image description here

, что является полным изображением, показанным на осях.

...