实时绘制熊猫系列时,Y轴标签不正确

时间:2019-07-15 09:52:01

标签: python pandas matplotlib axis-labels

我目前正在关注senddex在youtube上的Tkinter教程,偶然发现API数据的绘制问题。似乎我的y轴标签不是从小到大的顺序,而是在Pandas系列中首次出现时。

我尝试过一些想到的事情,例如将Pandas系列转换为列表,但是我对Pandas几乎没有经验。我在网上查找的所有内容都无法解决此问题。

import urllib.request
import json

import pandas as pd
from pandas.plotting import register_matplotlib_converters
import numpy as np

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import matplotlib.animation as animation
from matplotlib import style

import tkinter as tk
from tkinter import ttk

import matplotlib
matplotlib.use("TkAgg")

pd.options.mode.chained_assignment = None
register_matplotlib_converters()

LARGE_FONT = ("Verdana", 12)
style.use("ggplot")

f = Figure(figsize=(10, 6), dpi=100)
a = f.add_subplot(111)


def animate(i):
    data_link = "https://api.bitfinex.com/v1/trades/btcusd?limit=2000%27"
    data = urllib.request.urlopen(data_link)
    data = data.read().decode("utf-8")
    data = json.loads(data)
    data = pd.DataFrame(data)

    buys = data[(data["type"] == "buy")]
    buys["datestamp"] = np.array(buys["timestamp"]).astype("datetime64[s]")
    buy_dates = (buys["datestamp"]).tolist()

    sells = data[(data["type"] == "sell")]
    sells["datestamp"] = np.array(sells["timestamp"]).astype("datetime64[s]")
    sell_dates = (sells["datestamp"]).tolist()

    a.clear()
    a.plot_date(buy_dates, buys["price"])
    a.plot_date(sell_dates, sells["price"])

    title = "BTCUSD Prices\nLast Price: " + str(data["price"][0])
    a.set_title(title)


class SeaofBTCapp(tk.Tk):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        container = tk.Frame()

        container.pack(side="top", fill="both", expand=True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (StartPage, BTCePage):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(BTCePage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()


class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        super().__init__(parent)


class BTCePage(tk.Frame):

    def __init__(self, parent, controller):
        super().__init__(parent)

        label = tk.Label(self, text="Graph Page", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        button_1 = ttk.Button(self, text="Back to Home",
                              command=lambda: controller.show_frame(StartPage))
        button_1.pack()

        canvas = FigureCanvasTkAgg(f, self)
        canvas.draw()
        canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        toolbar = NavigationToolbar2Tk(canvas, self)
        toolbar.update()
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)


app = SeaofBTCapp()
ani = animation.FuncAnimation(f, animate, interval=5000)
app.mainloop()

应该发生的是,从API提取的值将显示在“正常”图中。但是在这里,y轴标签正像前面提到的那样切换。

是什么原因导致此问题?

以下是我(错误)结果的一个示例:https://imgur.com/a/fcNDyTF

0 个答案:

没有答案