我正在尝试将图表嵌入到我正在开发的 tkinter 应用程序中。我能够嵌入图表,但是,当我尝试旋转 x_axis 标签(日期)并使用 mdates 间隔时,它对图表没有影响。但是,当我在自己的 matplotlib 环境中加载图形时,它工作正常。
我认为它必须将figure函数与.gca()和.gcf()函数集成起来,因为当我有一个独立的matplotlib窗口时,我不必处理Figure()。我尝试做:
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' object has no attribute '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...