首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SimpleGUI在画布中显示mpf.plot

SimpleGUI在画布中显示mpf.plot
EN

Stack Overflow用户
提问于 2021-12-29 02:13:10
回答 1查看 139关注 0票数 1

下面的代码将Matplotlib工具栏嵌入到应用程序中,并将绘图嵌入到特定的画布中,但我希望嵌入我的mpf.plot而不是plt.plot。代码运行良好,但不会产生预期的结果,请提出任何建议。

代码语言:javascript
运行
复制
    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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-29 02:55:48

将选项returnfig=True添加到mpf.plot以使其返回fig, axlist

代码语言:javascript
运行
复制
        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)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70514468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档