python繪制圖表——隨機漫步

話不多說,先上幾張結(jié)果圖





目標(biāo)

利用python程序模擬花粉在水滴表面的運動軌跡,即隨機漫步

隨機漫步(Random walk)是一種數(shù)學(xué)統(tǒng)計模型,它由一連串軌跡所組成。其中每一次都是隨機的,它能用來表示不規(guī)則的變動形式。氣體或液體中分子活動的軌跡等可作為隨機漫步的模型

分析

為了模擬隨機漫步,可以先創(chuàng)建一個 RandomWork 的類,給這個類創(chuàng)建三個屬性,一是用于存儲隨機漫步次數(shù)的變量,另外兩個是用于存放隨機漫步每個點的x和y的坐標(biāo)。把相關(guān)數(shù)據(jù)存儲好后,再利用python的強大的庫 matplotlib 把數(shù)據(jù)繪制成圖表

詳細(xì)代碼

生成隨機漫步數(shù)據(jù)

from random import choice


class RandomWalk():
'''一個生成隨機漫步數(shù)據(jù)的類'''

def __init__(self, num_points=5000):
    '''初始化隨機漫步的屬性'''
    self.num_points = num_points

    # 所有隨機漫步都始于(0,0)
    self.x_values = [0]
    self.y_values = [0]

def get_step(self):
    '''計算每一個步數(shù)'''
    # 決定前進(jìn)的方向以及沿這個方向前進(jìn)的步數(shù)
    direction = choice([1, -1])
    distance = choice([0, 1, 2, 3, 4])
    return direction * distance

def fill_walk(self):
    '''計算隨機漫步包含的所有點'''

    # 不斷漫步,直到列表到指定的長度
    while len(self.x_values) < self.num_points:

        # 獲得步數(shù)(注意方法的調(diào)用)
        x_step = self.get_step()
        y_step = self.get_step()

        # 拒絕原地踏步
        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)

實現(xiàn)數(shù)據(jù)可視化

import matplotlib.pyplot as plt
from random_walk2 import RandomWalk
# 創(chuàng)建一個RandomWalk實例,并將其包含的點都繪制出來
rw = RandomWalk(50000)
rw.fill_walk()

# 設(shè)置繪圖窗口的尺寸,單位是英寸
plt.figure(figsize=(10, 6))

# 通過散點圖表示數(shù)據(jù)
point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors="none", s=1)

# 設(shè)置起點和終點的樣式
plt.scatter(0, 0, c='green', edgecolors="none", s=100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c=(1, 0, 0), edgecolors="none", s=100)

# 隱藏坐標(biāo)軸
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)

plt.show()

拓展

如果想把軌跡用線連接起來,只需要把“通過散點圖表示數(shù)據(jù)”那段代碼和導(dǎo)包修改,如下

import matplotlib.pyplot as plt

plt.plot(rw.x_values, rw.y_values, linewidth=1)

這么漂亮的圖表當(dāng)然會有想保存的沖動,只需要修改 plt.show 修改成 plt.savefig('此處填入保存的文件名')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容