Фигура Matplotlib теряет свой формат при добавлении большего количества страниц в блокнот - PullRequest
0 голосов
/ 23 сентября 2019

Я встраиваю много графиков в блокнот wxpython.Когда я впервые встраивал без ноутбука, сначала появлялся сюжет с заголовками и заголовками осей, но когда он начал анимироваться, они исчезали.эта проблема произошла со мной, и я исправил ее, изменив plt.Show() на plt.draw().Затем я хотел добавить более одного графика с помощью wx.notebook.Я добавил, что создал графики и вставил их в разные страницы записной книжки, теперь происходит то, что заголовки и заголовки осей отображаются только на последнем построенном графике.Это код, который я использую для сюжета и как я встраиваю

import wx
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.animation as animation
from pandas.plotting import register_matplotlib_converters
from Main.SQL.crud import session_scope
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar
register_matplotlib_converters()

class plot_panel(wx.Panel):
    def __init__(self, parent, model, x, y, title):
        wx.Panel.__init__(self, parent)
        sns.set()
        self.title = title
        self.figure = plt.figure(figsize=(10, 2))
        self.canvas = FigureCanvas(self, -1, self.figure)
        self.axis = self.figure.add_subplot(1, 1, 1)
        self.toolbar = NavigationToolbar(self.canvas)
        self.toolbar.Realize()

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas, 1, wx.EXPAND)
        sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.SetSizer(sizer)

        self.x_axis = []
        self.y_axis = []

        ani = animation.FuncAnimation(self.figure, self.animate, fargs=(self.x_axis, self.y_axis, model, x, y), interval=500)
        plt.draw()

    def animate(self, i, x_axis, y_axis, model, x, y):

        with session_scope() as s:
            time = s.query(x).order_by(model.Datetime.desc()).first()
            time = time[0]
            value = s.query(y).order_by(model.Datetime.desc()).first()
            value = value[0]
            value = round(value, 2)

            x_axis.append(time)
            y_axis.append(value)

        x_axis = x_axis[-150:]
        y_axis = y_axis[-150:]

        self.axis.clear()
        self.axis.plot(x_axis, y_axis)

        # Format plot
        #plt.xticks(rotation=45, ha='right')
        plt.subplots_adjust(bottom=0.30)
        plt.title(self.title)
        plt.ylabel(y.name)
        plt.xlabel(x.name)
self.plot = ploting.plot_panel(plot_notebook, hygrometer_model, hygrometer_model.Datetime, hygrometer_model.H20_concentration, 'H20 Concentration vs Datetime')
self.plot_0 = ploting.plot_panel(plot_notebook, hygrometer_model, hygrometer_model.Datetime, hygrometer_model.total_pressure, 'Total Pressure vs Datetime')
self.plot_1 = ploting.plot_panel(plot_notebook, hygrometer_model, hygrometer_model.Datetime, hygrometer_model.temperature, 'Temperature vs Datetime')

plot_notebook.AddPage(self.plot, hygrometer_model.H20_concentration.name)
plot_notebook.AddPage(self.plot_0, hygrometer_model.total_pressure.name)
plot_notebook.AddPage(self.plot_1, hygrometer_model.temperature.name)

1 Ответ

0 голосов
/ 24 сентября 2019

Я исправил это, теперь я изменил название заголовка, и теперь его нет в plt, что я делаю сейчас:

self.axis.set_title(self.title)
self.axis.set_xlabel(x.name)
self.axis.set_ylabel(y.name)
...