最近回顾学习排序,想用python实现,考虑可视化github上有一个python得https://github.com/ZQPei/Sorting_Visualization
还不错。
不过有用到opencv、pygame,我不太想用这个,看是否能直接用matplotlib画,有两种思路:①animation动画思路、②自己手动draw。
这一篇是自己探索的第②种,自己手动draw得方式
①ipython中无法动态实时更新,python console中才可以,使过一直都是空白,等代码全都执行完毕,才会显示最后得一张图,坑掉我无数实践
②实时动态,使用plt.pause(seconds)方式非阻塞刷新draw;(资料说需要开启交互方式plt.ion() 用完需关闭plt.ioff(),但测试并不是)
③最后可用plt.show()来阻塞,防止运行玩自己关闭了。
plt.bar柱状图,当排序交换数据时,将柱状图中的height数据进行交换,然后draw即可
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 21 00:32:06 2019
pyplot_dynamic_draw_sample_01.py
在ipython中无法体现出动态效果,需要再window得cmd中启动pyton(linux也是一样console启动),然后输入下面得文件就能看到效果
@author: Sudaxia
"""
#matplotline #jupyter ipython中别加inline就能画图出来
import matplotlib.pyplot as plt
import random
#plt.ion()
plt.ioff()
def swapAndDraw(data,x1,x2):
temp1height=tempbar[x1].get_height()
tempbar[x1].set_height(tempbar[x2].get_height())
tempbar[x2].set_height(temp1height)
tempbar[x2].set_fc("red")
plt.draw()
plt.pause(0.001)
tempbar[x2].set_fc("green")#记得颜色换回来
#冒泡排序
data=random.sample(range(20),20)
print data
n=len(data)
tempbar=plt.bar(range(n),data,fc="green")
for m in range(n):#趟数
for i in range(n-m-1):
if data[i]>data[i+1]:
data[i+1],data[i]=data[i],data[i+1]
#print "data:\t",data
swapAndDraw(data,i,i+1)
#print "bar:\t",[x.get_height() for x in tempbar]
print data;
plt.ioff();
#plt.show();
下一篇讲解animation动画排序展示,并保存文件