我只是想用matplotlib制作一个实时的图表。但是我找不到draw-remove-redraw axhline()的方法。我的目标是显示一条水平线的最新值的Y轴值,当然,删除最近的水平线。
`
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
import time
from random import randrange
style.use("fivethirtyeight")
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
#ax1 = plt.subplot()
second = 1
xs = list()
ys = list()
ann_list = []
a = 0
ten = 10
def animate(i):
global second
global a, ten
random = randrange(ten)
ys.append(random)
xs.append(second)
second += 1
ax1.plot(xs, ys, linestyle='--', marker='o', color='b')
plt.axhline(y = ys[-1], linewidth=2, color='r', linestyle='-')
if len(xs) > 2:
plt.axhline(y = ys[-2], linewidth=2, color='r', linestyle='-').remove()
if len(ys) > 20 and len(xs) > 20:
ax1.lines.pop(0)
ys.pop(0)
xs.pop(0)
a += 1
ax1.set_xlim(a, (21 + a))
# ax1.set_ylim(0, 200)
ani = animation.FuncAnimation(fig, animate, interval=100)
plt.show()
`
期望它只显示最新的y轴值和一条水平线。但是水平线并没有消失。
1条答案
按热度按时间gojuced71#
在您的程式码中:
不会删除之前的
axhline
;它在y=ys[-2]
处添加一个新的axhline
,然后立即删除它。您必须删除使用
plt.axhline
插入的同一行。将此函数返回的对象保存到某个位置,并在下一帧动画显示时删除它。这里有一个解决方案,其中有一些默认的可变参数滥用。