编程语言
首页 > 编程语言> > 用python中的Matplotlib库实现排序冒泡算法可视化

用python中的Matplotlib库实现排序冒泡算法可视化

作者:互联网

 ### 实现原理:

* 实现排序算法的可视化,只要将每一次数据的变化进行颜色标记,将其作为一帧柱状图画面的数据绘制出来,将上一帧的画面清除,循环往复直到最终排好序的画面展示,我们的一次排序算法可视化的循环就可以完成了。

* 我们便需要一个二维列表(frames),里面的元素是每一帧的数据列表

* 也需要将每个数据变成一个class,有自己的value属性和color属性,以及set_color()方法

 ### 导入相关库:

%matplotlib notebook
import copy
import random
import matplotlib.pyplot as plt
from matplotlib import animation

### 定义数据类,每个类中有自己的vaule与color、以及set_color的方法 

class Data:
    def __init__(self, value):
        self.value = value
        self.color = '#6495ED'

    def set_color(self, color):
        self.color = color

### 冒泡算法方法

def sort(li):

    # 这样赋值的frames列表中的元素是一个个的列表,每一帧的数据是其中的元素
    frames = [li]

    ds = copy.deepcopy(li)      # 赋值一份初始列表,用于存储每一帧变化后的数据

# 冒泡排序:
    for i in range(32):
        for j in range(32 - i - 1):
            ds_r = copy.deepcopy(ds)        # 赋值一份ds中的数据
            ds_r[j].set_color('#DC143C')    # 将数据的color设置为'#DC143C'
            ds_r[j + 1].set_color('#7FFFAA')
            frames.append(ds_r)             # 将color变化后的数据追加到frmaes中
            if ds[j].value > ds[j + 1].value:
                ds[j + 1], ds[j] = ds[j], ds[j + 1]
                

    frames.append(ds)   # 将最后排好序的数据追加
    return frames

### 处理数据

li = list(range(1, 33))     # 生成1~32
random.shuffle(li)          # 打乱顺序


data_set = [Data(d) for d in li]    # 将列表中的每一个数值变成Data类的对象
frames = sort(data_set)             # 进行排序
fig = plt.figure()    # 绘制画布
def animate(fi):
    ax = plt.gca()
    ax.cla()
    bar = ax.bar(
            list(range(32)),  # x
            [d.value for d in frames[fi]],  # data
            0.9,  # width
            color=[d.color for d in frames[fi]]
    )

    plt.xticks([])
    plt.yticks([])
    return bar
anim = animation.FuncAnimation(fig, animate, frames=len(frames), interval=100)
#anim.save('selectsort.gif')
plt.show()

结果图:

 

标签:plt,一帧,python,Matplotlib,color,animation,冒泡,frames,ds
来源: https://blog.csdn.net/m0_50442138/article/details/120357955