下面的代码将Matplotlib工具栏嵌入到应用程序中,并将绘图嵌入到特定的画布中,但我希望嵌入我的mpf.plot而不是plt.plot。代码运行良好,但不会产生预期的结果,请提出任何建议。
    import PySimpleGUI as sg
    import numpy as np
    import pandas as pd
    import mplfinance as mpf
    import numpy as np
    import json
    import requests
    '''
        Embedding the Matplotlib toolbar into your application
    
    '''
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
    
    
    def draw_figure_w_toolbar(canvas, fig, canvas_toolbar):
        if canvas.children:
            for child in canvas.winfo_children():
                child.destroy()
        if canvas_toolbar.children:
            for child in canvas_toolbar.winfo_children():
                child.destroy()
        figure_canvas_agg = FigureCanvasTkAgg(fig, master=canvas)
        figure_canvas_agg.draw()
        toolbar = Toolbar(figure_canvas_agg, canvas_toolbar)
        toolbar.update()
        figure_canvas_agg.get_tk_widget().pack(side='right', fill='both', expand=1)
    
    
    class Toolbar(NavigationToolbar2Tk):
        def __init__(self, *args, **kwargs):
            super(Toolbar, self).__init__(*args, **kwargs)
    
    
    
    layout = [
        [sg.T('Graph: y=sin(x)')],
        [sg.B('Plot'), sg.B('Exit')],
        [sg.T('Controls:')],
        [sg.Canvas(key='controls_cv')],
        [sg.T('Figure:')],
        [sg.Column(
            layout=[
                [sg.Canvas(key='fig_cv',
                           # it's important that you set this size
                           size=(400 * 2, 400)
                           )]
            ],
            background_color='#DAE0E6',
            pad=(0, 0)
        )],
        [sg.B('Alive?')]
    
    ]
    
    window = sg.Window('Graph with controls', layout)
    
    while True:
        event, values = window.read()
        print(event, values)
        if event in (sg.WIN_CLOSED, 'Exit'):  # always,  always give a way out!
            break
        elif event == 'Plot':
        string = 'https://api.binance.com/api/v1/klines?symbol=BTCUSDT&interval=15m'
        URL = string
        response = requests.get(url = URL)
        response = response.json()
        df = pd.DataFrame(response)
        df[0] = pd.to_datetime((df[0]), unit='ms')
        df.drop([5,6,7,8,9,10,11], axis=1, inplace=True)
        df.rename(columns={0: 'Date',1: 'Open', 2:'High', 3:'Low', 4: 'Close'}, inplace=True)
        df.index = pd.DatetimeIndex(df['Date'])
        df['Open'] = df['Open'].astype(float)
        df['High'] = df['High'].astype(float)
        df['Low'] = df['Low'].astype(float)
        df['Close'] = df['Close'].astype(float)
        df.shape
        df.head(3)
        df.tail(3)
        colors = [
        'blueskies',
         'brasil',
         'charles',
         'checkers',
         'classic',
         'default',
         'mike',
         'nightclouds',
         'sas',
         'starsandstripes',
         'yahoo'
         ]
        mpf.plot(
            df,
            type='candle',
            style= colors[10],
            title= colors[10],
            ylabel='Price ($)',
        )
        plt.figure(1)
        fig = plt.gcf()
        DPI = fig.get_dpi()
        fig.set_size_inches(404 * 2 / float(DPI), 404 / float(DPI))
        # -------------------------------
        x = np.linspace(0, 2 * np.pi)
        y = np.sin(x)
        plt.plot(x, y)
        plt.title('y=sin(x)')
        plt.xlabel('X')
        plt.ylabel('Y')
        plt.grid()
        # ------------------------------- Instead of plt.show()
        draw_figure_w_toolbar(window['fig_cv'].TKCanvas, fig, window['controls_cv'].TKCanvas)
    window.close()发布于 2021-12-29 02:55:48
将选项returnfig=True添加到mpf.plot以使其返回fig, axlist。
        fig, axlist = mpf.plot(
            df,
            type='candle',
            style= colors[10],
            title= colors[10],
            ylabel='Price ($)',
            returnfig=True,
        )
        # ------------------------------- Instead of plt.show()
        draw_figure_w_toolbar(window['fig_cv'].TKCanvas, fig, window['controls_cv'].TKCanvas)

https://stackoverflow.com/questions/70514468
复制相似问题