我正试图将图形嵌入到我正在工作的tkinter应用程序中。我能够嵌入图形,但是,当我尝试旋转x_axis标签(日期)并使用候选日期间隔时,它对图形没有影响。然而,当我在自己的matplotlib环境中加载图时,它工作得很好。
我认为它必须与集成图形函数与。gca()和。gcf()函数做一些事情,因为当我有一个独立的matplotlib窗口时,我不必处理图()。我试着做:
fig.plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
fig.plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=7))
fig.plt.gcf().autofmt_xdate(rotation=30)
然而,我得到AttributeError: 'Figure'对象没有属性'plt'然后我试着删除。plt,只留下。fig,但是我也得到了:AttributeError: 'Figure'对象没有属性'gcf'
我下面的代码是什么,我想做的是:
def matplot(self,parent):
company = yf.Ticker('aapl')
stock_historical = yf.download('aapl', start='2021-08-13', end='2021-10-15', interval='1d')
get_y = stock_historical
opening_days = get_y['Open']
y_axiz = opening_days.values.tolist()
y_axis = []
for day in opening_days:
y_axis.append(round(day, 2))
stock_historical.reset_index(inplace=True, drop=False)
data = []
for i in stock_historical['Date']:
data.append(i)
x_axis = []
for date in data:
parsed_data = date.to_pydatetime()
convert_date = str(parsed_data.strftime('%Y/%m/%d'))
x_axis.append(convert_date)
#print(x_axis)
x = [dt.datetime.strptime(d, '%Y/%m/%d').date() for d in x_axis]
# tkinter frame slave of root
fig = Figure(figsize=(4, 4), dpi=100)
new_frame = Frame(self.detailed_frame,width=150,height=150)
new_frame.pack()
test_label = Label(new_frame,text='hello',font='Arial 16 bold')
test_label.pack()
# x_axis shenanigans not wanting to work
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=7))
plt.gcf().autofmt_xdate(rotation=30)
fig.add_subplot(111).plot(x, y_axis)
# embed into tkinter
canvas = FigureCanvasTkAgg(fig, master = new_frame)
canvas.draw()
get_widz = canvas.get_tk_widget()
get_widz.pack(side=TOP, fill=BOTH, expand=1)
toolbar = NavigationToolbar2Tk(canvas, self.detailed_frame)
toolbar.update()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
请帮忙,谢谢。
将pyplot视为Matplotlib的GUI应用程序。如果您将Matplotlib嵌入到您自己的GUI应用程序中,则"pyplot"应用程序不知道修订的Matplotlib,因此plt.gca
等不工作,因为pyplot应用程序不跟踪图形和轴。在上面,不调用plt.gca()
,调用ax = fig.subplots()
,然后调用ax.xaxis.set...