我目前正在关注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