动画 Matplotlib 图
Animating a Matplotlib Graph
我正在尝试可视化排序算法,并且我有 updateGraph 方法来放入新值,但如何将这些值放入图表中? plt.show() 方法内部不起作用。我读了一些关于动画方法之类的东西,但我真的不明白所以真的很感激帮助
def updateGraph(list): plt.bar(range(0, int(size)), list) plt.show()
一个选项是清除轴并为每次迭代绘制一个新的条形图。
请注意,我还添加了 plt.pause()
以便显示动画。
from matplotlib import pyplot as plt
import random
size = 10
fig, ax = plt.subplots()
plt.title("Bubble Sort Visualization")
plt.xlim((-0.6, size-0.4))
plt.ylim((0, size))
def updateGraph(lst):
plt.cla()
plt.bar(range(0, int(size)), lst)
plt.pause(0.2) # Choose smaller time to make it faster
plt.show()
def bubbleSort(lst):
n = len(lst)
elementsInPlace = 0
comparisonCount = 0
while n > 1:
for i in range(len(lst) - elementsInPlace - 1):
if lst[i] > lst[i + 1]:
comparisonCount += 1
lst[i], lst[i + 1] = lst[i + 1], lst[i]
updateGraph(lst)
else:
comparisonCount += 1
n -= 1
elementsInPlace += 1
return lst
randomlist = random.sample(range(1, int(size) + 1), int(size))
bubbleSort(randomlist)
不清除绘图而是更新条形图可能会更快:
h = ax.bar(range(size), randomlist)
def updateGraph(lst):
for hh, ll in zip(h, lst):
hh.set_height(ll)
plt.pause(0.001)
我正在尝试可视化排序算法,并且我有 updateGraph 方法来放入新值,但如何将这些值放入图表中? plt.show() 方法内部不起作用。我读了一些关于动画方法之类的东西,但我真的不明白所以真的很感激帮助
def updateGraph(list): plt.bar(range(0, int(size)), list) plt.show()
一个选项是清除轴并为每次迭代绘制一个新的条形图。
请注意,我还添加了 plt.pause()
以便显示动画。
from matplotlib import pyplot as plt
import random
size = 10
fig, ax = plt.subplots()
plt.title("Bubble Sort Visualization")
plt.xlim((-0.6, size-0.4))
plt.ylim((0, size))
def updateGraph(lst):
plt.cla()
plt.bar(range(0, int(size)), lst)
plt.pause(0.2) # Choose smaller time to make it faster
plt.show()
def bubbleSort(lst):
n = len(lst)
elementsInPlace = 0
comparisonCount = 0
while n > 1:
for i in range(len(lst) - elementsInPlace - 1):
if lst[i] > lst[i + 1]:
comparisonCount += 1
lst[i], lst[i + 1] = lst[i + 1], lst[i]
updateGraph(lst)
else:
comparisonCount += 1
n -= 1
elementsInPlace += 1
return lst
randomlist = random.sample(range(1, int(size) + 1), int(size))
bubbleSort(randomlist)
不清除绘图而是更新条形图可能会更快:
h = ax.bar(range(size), randomlist)
def updateGraph(lst):
for hh, ll in zip(h, lst):
hh.set_height(ll)
plt.pause(0.001)