Python Matplotlib使用滑块滚动图表时更新图表的更有效方法?
我希望能够滚动浏览一个冗长的图表。是否有比每次滚动条移动时清除轴并重新打印整个内容更有效/更快的方法Python Matplotlib使用滑块滚动图表时更新图表的更有效方法?,python,matplotlib,slider,Python,Matplotlib,Slider,我希望能够滚动浏览一个冗长的图表。是否有比每次滚动条移动时清除轴并重新打印整个内容更有效/更快的方法 import matplotlib.pyplot as plt from matplotlib.widgets import Slider import random x=[c for c in range(300)] y=[random.randint(1,10) for c in range(300)] showbars=100 fig = plt.figure() ax = plt.s
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import random
x=[c for c in range(300)]
y=[random.randint(1,10) for c in range(300)]
showbars=100
fig = plt.figure()
ax = plt.subplot(111)
ax.bar(x[:showbars],y[:showbars])
def slidebar(pos):
pos = int(pos)
ax.clear()
ax.bar(x[pos:pos+showbars],y[pos:pos+showbars])
slidebarpos = plt.axes([0.1, 0.01, 0.5, 0.03], facecolor="skyblue")
slider = Slider(slidebarpos, '', 0, len(x)-showbars, valinit=0)
slider.on_changed(slidebar)
slidebar(0)
plt.show()
这在我的计算机上很慢首先,您只能绘制一次条形图,并使用滑块仅更改显示的范围,即x轴的限制
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import numpy as np
x=np.arange(300)
y=np.random.randint(1,10, size=300)
showbars=100
fig, ax = plt.subplots()
ax.bar(x,y)
def slidebar(pos):
ax.set_xlim(pos-1, pos+showbars+1)
slidebarpos = plt.axes([0.1, 0.01, 0.5, 0.03], facecolor="skyblue")
slider = Slider(slidebarpos, '', 0, len(x)-showbars, valinit=0)
slider.on_changed(slidebar)
slidebar(0)
plt.show()
你也可以保持同一个条的位置,但改变它们的高度,伪造记号和标签,使这些条看起来像是在更新
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from matplotlib.ticker import AutoLocator
import numpy as np
x=np.arange(300)
y=np.random.randint(1,10, size=300)
showbars=100
fig, ax = plt.subplots()
bars = ax.bar(x[:showbars],y[:showbars])
loc = AutoLocator()
def slidebar(pos):
pos = int(pos)
for bar, yi in zip(bars, y[pos:showbars+pos]):
bar.set_height(yi)
ticks = loc.tick_values(pos, showbars+pos)
ax.set_xticks(ticks-pos)
ax.set_xticklabels(ticks)
slidebarpos = plt.axes([0.1, 0.01, 0.5, 0.03], facecolor="skyblue")
slider = Slider(slidebarpos, '', 0, len(x)-showbars, valinit=0)
slider.on_changed(slidebar)
slidebar(0)
plt.show()
两种解决方案都明显比我发布的快,但哪种方法最快?