下面的代碼會將 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()
uj5u.com熱心網友回復:
添加選項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://www.uj5u.com/gongcheng/396823.html
