Я хочу добавить существующий график из matplotlib в мой графический интерфейс wxpython - PullRequest
0 голосов
/ 20 марта 2019

я написал функцию, которая рисует график из заданных значений с помощью matplotlib. Я хотел добавить график в мой графический интерфейс, который находится в другом классе, просто вызвав график и поместив его в верхнем левом углу. Я долго искал, но пока не нашел хорошего решения. Как я мог достичь этого?

код графика:

def draw_graph(y_money, x_date):


counter = -1
now_money = []

for value in y_money:

    if counter >= 0:
        before_value = now_money[-1]
        now_value = before_value + y_money[counter+1]
        now_money.append(now_value)
        counter += 1

    else:
        now_money.append(y_money[0])
        counter += 1
plt.rcParams['toolbar'] = 'None'
plt.plot(now_money, "lime", label="Money")

before = 0
counter_2 = 0

#  Show if before value was lower than now value(red/green)
for element in now_money:

    if element >= before:
        plt.scatter(x_date[counter_2], element, c="green", s=50)
        counter_2 += 1
        before = element

    else:
        plt.scatter(x_date[counter_2], element, c="red", s=50)
        counter_2 += 1
        before = element

x_tick = []
for item in x_date:
    try:
        x_tick.append(item[:3])
    except IndexError:
        x_tick.append("")

plt.xticks(np.arange(7), x_tick)
plt.legend()
plt.show()

1 Ответ

0 голосов
/ 21 марта 2019

Поскольку вы не указали, где (в терминах wxWidgets) вы пытаетесь добавить свой график в графический интерфейс, я постараюсь дать общий ответ. В своих приложениях я использую wx.Panel в качестве основы или основы рисунков matplotlib.

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

import wx
from matplotlib.figure import Figure
import matplotlib.pyplot as plt

class PlotPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        # self.fig = Figure((10, 4), 75)
        sizer = wx.BoxSizer()
        sizer.Add(self, 1, wx.EXPAND)
        self.Parent.SetSizer(sizer)
        # self.fig = Figure(facecolor='blue')
        self.fig = Figure()
        self.canvas = FigureCanvasWxAgg(self, -1, self.fig)
        # Create toolbar for the figure
        self.toolbar = Toolbar(self.canvas)  # matplotlib toolbar
        self.toolbar.Realize()
        # Now put all into a sizer
        sizer = wx.BoxSizer(wx.VERTICAL)
        # This way of adding to sizer allows resizing
        sizer.Add(self.canvas, 1, wx.EXPAND | wx.ALL | wx.CENTER | wx.CENTER | wx.GROW)
        # Best to allow the toolbar to resize!
        sizer.Add(self.toolbar, 0, wx.EXPAND | wx.ALL | wx.GROW)
        self.SetSizer(sizer)
        self.Fit()

    def GetToolBar(self):
        # You will need to override GetToolBar if you are using an
        # unmanaged toolbar in your frame
        return self.toolbar

    def onEraseBackground(self, evt):
        # this is supposed to prevent redraw flicker on some X servers...
        pass

    def draw_graph(self, y_money, x_date):
        """ You can access above parameters and plot
    your graph """
    # Your own plotting function definition

Это частично моя реализация с использованием источника из этой старой scipy wiki ссылки . Некоторые вещи внутри функции init могут быть бесполезны для вашего приложения, такие как панель инструментов и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...