当 matplotlib 嵌入 tkinter 时,.gca() 和 .gcf() 函数不起作用

问题描述 投票:0回答:1

我正在尝试将图表嵌入到我正在开发的 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)

任何帮助将不胜感激,谢谢。

python matplotlib tkinter
1个回答
0
投票

将 pyplot 视为 Matplotlib 的 GUI 应用程序。如果您将 Matplotlib 嵌入到自己的 GUI 应用程序中,则“pyplot”应用程序不知道嵌入的 Matplotlib,因此

plt.gca
等不起作用,因为 pyplot 应用程序不跟踪图形和轴。在上面,不要调用
plt.gca()
,而是调用
ax = fig.subplots()
,然后调用
ax.xaxis.set...

© www.soinside.com 2019 - 2024. All rights reserved.