python - 使用 Matplotlib 是否可以从实时数据中注释最新的数据点?
问题描述
我目前正在从事一个爱好项目,并被困在 Matplotlib 中的注释上。
我有 2 个 Python 文件,一个从 yahoo 和当前时间抓取股票的当前价格。然后将此信息写入 csv:
from yahoo_fin import stock_info as si
import csv
import random
import time
from datetime import datetime
fieldnames = ['MSFTPrice', 'CurrentTime']
with open('MSFT.csv', 'w') as csv_file:
csv_writer = csv.DictWriter(csv_file, delimiter=',', lineterminator='\n', fieldnames= fieldnames)
csv_writer.writeheader()
count = 0
while True:
with open('MSFT.csv', 'a') as csv_file:
csv_writer = csv.DictWriter(csv_file, delimiter=',', lineterminator='\n', fieldnames= fieldnames)
MSFTPrice = si.get_live_price("MSFT")
count += 1.0
now = datetime.now()
CurrentTime = now.strftime("%H:%M:%S")
info = {
"MSFTPrice": '%.2f' %MSFTPrice,
"CurrentTime": CurrentTime}
csv_writer.writerow(info)
print('%.2f'%MSFTPrice, CurrentTime)
time.sleep(1)
if count >= 10000:
break
所以第二个是读取这两个值,然后使用 matplotlib 创建一个实时可视化:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
plt.style.use('fivethirtyeight')
plt.style.use('dark_background')
def animate(i):
data = pd.read_csv('MSFT.csv')
x = data ["CurrentTime"]
y = data ["MSFTPrice"]
plt.cla()
plt.xlabel('Time')
plt.ylabel('Price')
plt.plot(x, y, color= 'green', linewidth=1.5)
plt.xticks(x[::300],fontsize= 12, rotation='horizontal')
for i,j in zip(x,y):
plt.annotate (str(j), xy = (i,j))
plt.tight_layout()
plt.grid(b=None)
ani = FuncAnimation(plt.gcf(), animate, interval=1000)
plt.tight_layout()
plt.show()
我只想注释 csv 中的最新数据点,但目前它注释所有数据点。这是它现在的样子的屏幕截图: Plot
希望你能帮我 :)
解决方案
您可以替换以下内容(注释循环中的所有点):
for i,j in zip(x,y):
plt.annotate (str(j), xy = (i,j))
使用注释最新点 ( x[-1], y[-1]
) 的语句:
plt.annotate(str(y[-1]), xy=(x[-1], y[-1]))
推荐阅读
- html - 使用 Codepen 在移动设备上调整 HTML 和 CSS 大小,但在发布到 Github 或 Bluehost 之后不会
- arrays - Swift:获取由某个属性过滤的对象数组的索引
- pytorch - 使用torch.utils.tensorboard添加图表时出现RuntimeError如何解决
- python - 在文本分类模型中加入额外的数字特征
- google-apps-script - 在谷歌脚本上尝试工作表保护时出现服务错误
- java - 如何将 JScrollpane 添加到 JPanel?
- heap-memory - 为什么像 AppDynamics 或 VisualVM 这样的 APM 工具会在空闲状态下显示堆内存峰值?
- mysql - mysql 每次销售中每个唯一 ID 的累积总和:
- ruby-on-rails - ActionController::RoutingError(未初始化的常量 IndexController
- c - 为什么 C 允许对尚未创建的变量使用 sizeof 运算符?