Python数据可视化(随机漫步)

Python数据可视化(随机漫步)

类似于分子运动的无规则扩散运动,利用散点图或者折线图描述其运动。

首先定义随机漫步的类。
from random import choice

class RandomWalk(object):
    def __init__(self, num_points):
        '''
        初始化,num_points:总的点数
        '''
        self.num_points = num_points
        #列表用来存储每个点的x, y坐标,起始点为(0, 0)
        self.x_values_list = [0]
        self.y_values_list = [0]
    
    def get_points(self):
        '''
        获得随机漫步的坐标点
        '''
        #当坐标的列表长度小于总点数时,随机漫步
        while len(self.x_values_list) < self.num_points:
            x_step = self.get_page()
            y_step = self.get_page()
            
            #防止原地不动(若原地不动,则直接进行下次循环)
            if x_step == 0 and y_step == 0:
                continue
            
            #若正常漫步,则计算下一点的坐标,存入列表
            next_x = self.x_values_list[-1] + x_step
            next_y = self.y_values_list[-1] + y_step
            self.x_values_list.append(next_x)
            self.y_values_list.append(next_y)
            
    def get_page(self):
        '''
        获取随机步长与方向
        '''
        direction = choice([-1, 1])
        distance = choice([0, 1, 2, 3, 4])
        step = direction * distance
        return step
使用matplotlib中的pyplot画图。
import matplotlib.pyplot as plt

#生成随机漫步的实例对象
random_walk = RandomWalk(5000)
random_walk.get_points()

plt.scatter(random_walk.x_values_list, random_walk.y_values_list, s=14)
plt.show()

在这里插入图片描述

利用颜色映射在图上显示随机漫步的过程(由于是根据先后进行映射,所以c设置为1到5000的列表),再画出起点和终点的位置。
plt.scatter(random_walk.x_values_list, random_walk.y_values_list, c=list(range(1, 5001)), cmap=plt.cm.Blues, edgecolors='None', s=14)
plt.scatter(random_walk.x_values_list[0], random_walk.y_values_list[0], c='red', s=100)
plt.scatter(random_walk.x_values_list[-1], random_walk.y_values_list[-1], c='red', s=100)

plt.show()

png

隐藏坐标轴。
plt.scatter(random_walk.x_values_list, random_walk.y_values_list, c=list(range(1, 5001)), cmap=plt.cm.Blues, edgecolors='None', s=14)
plt.scatter(random_walk.x_values_list[0], random_walk.y_values_list[0], c='red', s=100)
plt.scatter(random_walk.x_values_list[-1], random_walk.y_values_list[-1], c='red', s=100)

#隐藏坐标轴
plt.axis('off')

plt.show()

png

同样地,也可以使用折线图表示。
plt.plot(random_walk.x_values_list, random_walk.y_values_list, linewidth=0.5)
plt.scatter(random_walk.x_values_list[0], random_walk.y_values_list[0], c='red', s=100)
plt.scatter(random_walk.x_values_list[-1], random_walk.y_values_list[-1], c='red', s=100)

#隐藏坐标轴
plt.axis('off')

plt.show()

png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值