創建Randomwalk()類
我們將使用Python來生成隨機漫步數據,再使用matplotlib以引入矚目的方式將這些數據呈現出來
首先創建類Randomwalk()
from random import choice class RandomWalk(): '''一個生成隨機漫步數據的類''' def __init__(self,num_points=5000): '''初始化隨機漫步的屬性''' self.num_points = num_points #所有的隨機漫步都始於(0,0) self.x_values = [0] self.y_values = [0] def fill_walk(self): '''計算隨機漫步的所有點''' # 不斷漫步,直到列表到達指定長度 while len(self.x_values)<self.num_points: # 決定前進方向以及沿這個方向前進的距離 x_direction = choice([1,-1]) x_distance = choice([0,1,2,3,4]) x_step = x_direction*x_distance y_direction = choice([1, -1]) y_distance = choice([0, 1, 2, 3, 4]) y_step = y_direction * y_distance #拒絕原地踏步 if x_step == 0 and y_step == 0: continue #計算下一個點的x和y值 next_x = self.x_values[-1]+x_step next_y = self.y_values[-1] + y_step self.x_values.append(next_x) self.y_values.append(next_y)
__init__()和fill_walk(),其中后者計算隨機漫步經過的所有點。
我們使用choice([1,-1])給direction選擇一個值,結果要么是表示向右走1,要么表示向左走-1,接下來,choice([0,1,2,3,4])隨機的選擇一個0~4之間的整數,告訴Python沿着指定的方向走多遠(x_distance)
繪制隨機漫步圖
import matplotlib.pyplot as plt from matplotlib_test.random_walk import RandomWalk #創建一個RandomWalk實例,並將其包含的點都繪制出來 rw = RandomWalk() rw.fill_walk() print(rw.x_values) plt.scatter(rw.x_values,rw.y_values,s=15) plt.show()
運行結果:
我們首先導入模塊pyplot和Randomwalk類,然后我們創建一個實例,並將其存儲到rw中,再調用fill_walk(),我們將隨機漫步的x與y值傳遞給scatter(),並選擇了合適的點尺寸,顯示包含5000個點的隨機漫步。
模擬多次隨機漫步
import matplotlib.pyplot as plt from matplotlib_test.random_walk import RandomWalk #只要程序處理活動狀態,就不斷的隨機模擬 while True: #創建一個RandomWalk實例,並將其包含的點都繪制出來 rw = RandomWalk() rw.fill_walk() plt.scatter(rw.x_values,rw.y_values,s=15) plt.show() keep_running = input("Make another walk?(y/n):") if keep_running == 'n': break
這些代碼模擬一次隨機漫步,在matplotlib查看器中顯示結果,再不關閉查看器的情況下暫停。如果你關閉了查看器,程序詢問你是否再模擬一次隨機漫步,如果你輸入y,那么將繼續,如果你輸入n,那么將退出。
設置隨機漫步圖樣式
1.給點着色

我們使用顏色映射來指出個點的先后順序,並刪除每個點的黑色輪廓,讓他們的顏色更明顯,為根據漫步中各點的先后順序進行着色,我們傳遞參數c,並將其設置為一個列表,其中包含個點的先后順序。
運行結果:
2.重新繪制起點與終點
為了凸顯上圖的起點跟終點,我們可以這么做
運行結果:
3.隱藏坐標軸
為了修改坐標軸,使用函數plt.axes()來將坐標軸的可見性設置為False
運行結果:
4.增加點數
下面我們增加點數,在創建RandomWalk實例時增大num_points的值
運行結果:
5.調整窗口的尺寸大小
圖表適合屏幕大小時,更有效的將數據中的規律呈現出來
窗口明顯變大
如果知道自己系統的分辨率,還可以使用形參dpi傳遞該分辨率
plt.figure(dpi=128,figsize=(10,6))