Python数据可视化(随机漫步)
类似于分子运动的无规则扩散运动,利用散点图或者折线图描述其运动。
首先定义随机漫步的类。
from random import choice
class RandomWalk(object):
def __init__(self, num_points):
'''
初始化,num_points:总的点数
'''
self.num_points = num_points
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()
![Python数据可视化(随机漫步)_第1张图片](http://img.e-com-net.com/image/info8/ae62c4dcaca9425a9f5dd6ef944062bf.jpg)
利用颜色映射在图上显示随机漫步的过程(由于是根据先后进行映射,所以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()
![Python数据可视化(随机漫步)_第2张图片](http://img.e-com-net.com/image/info8/b03d0f8481b54a409f1417eb391e60a3.jpg)
隐藏坐标轴。
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()
![Python数据可视化(随机漫步)_第3张图片](http://img.e-com-net.com/image/info8/d72bb5fd65ad4df3bbd8ba0edfc7ca34.jpg)
同样地,也可以使用折线图表示。
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()
![Python数据可视化(随机漫步)_第4张图片](http://img.e-com-net.com/image/info8/9cdd80ea7ea24653ace5c5bb982562c8.jpg)