【发布时间】:2019-07-31 18:18:49
【问题描述】:
我想在 tkinter 中显示 numpy.ndarray matplotlib。
我在后端尝试过,它工作正常,但没有在 tkinter 中显示并显示带有图形为空的画布。相反,下面的代码在单独的窗口中显示图片作为弹出窗口。如何在画布和窗口内显示它?
from tkinter import *
from tkinter import ttk
import numpy as np
import pandas as pd
from scipy.stats import norm
import requests
from pandas_datareader import data as wb
import matplotlib.pyplot as plt
%matplotlib inline
from yahoofinancials import YahooFinancials
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib
matplotlib.use('TkAgg')
class Scr:
def __init__(self, master):
master.geometry('300x300+120+60')
self.frame_content = ttk.Frame(master)
self.frame_content.pack()
tickers = ['AAPL']
new_data = pd.DataFrame()
for t in tickers :new_data[t] = wb.DataReader(t, data_source ='yahoo', start = '2004-1-1')['Adj Close']
lr = np.log(1+new_data.pct_change())
var=lr.var()
mean=lr.mean()
drift = mean-(0.5 * var)
stdv=lr.std()
norm.ppf(0.95)
x = np.random.rand(10,2)
norm.ppf(x)
Ze=norm.ppf(np.random.rand(10,2))
t_intervals =1000
iteration=10
daily_returns=np.exp(drift.values + stdv.values * norm.ppf(np.random.rand(t_intervals,iteration)))
S=new_data.iloc[-1]
am = np.zeros_like(daily_returns)
am[0] = S
for t in range (1, t_intervals):
am[t]=am[t-1] * daily_returns[t]
graph3=ttk.Frame(master)
graph3.pack()
graph3.place(x=750,y=550)
plt.plot(am)
fig3 = matplotlib.pyplot.Figure(figsize=(6,6))
canvas3 = FigureCanvasTkAgg(fig3, graph3)
canvas3.get_tk_widget().pack()
ax3 = fig3.add_subplot(211)
am.plot(kind='line', legend=True, ax=ax3).grid(linestyle = 'dashed')
def main():
root = Tk()
scr = Scr(root)
root.mainloop()
if __name__ == "__main__": main()
我得到的错误信息是:
'numpy.ndarray' 对象没有属性'plot'
【问题讨论】:
-
numpy.narray不是pandas.DataFrame,它有df.plot()。使用plt.plot(am)plt.show()或将am转换为DataFrame -
pack()和place()是将小部件放入窗口的两种不同方法 - 使用其中一种。您使用.place(x=750,y=550),所以绘图在窗口中,但窗口太小并且绘图不可见 -place()不会调整窗口大小 - 所以我必须调整窗口大小才能看到绘图。pack()自动调整窗口大小,您会立即看到它。 -
非常感谢。现在可以了。图形显示在画布中,图形周围的区域是黑色的,占用太多空间。有什么办法可以去除颜色并使其透明?我尝试了边框宽度和背景颜色,但它不起作用。有什么问题吗?
标签: python-3.x matplotlib tkinter numpy-ndarray