用matplotlib+類(lèi)繪制隨機(jī)漫步圖

當(dāng)學(xué)會(huì)了制作散點(diǎn)圖和折線(xiàn)圖這些初級(jí)操作,我們就來(lái)學(xué)習(xí)用類(lèi)制作隨機(jī)漫步數(shù)據(jù),并使用matplotlib將之呈現(xiàn)出來(lái)

1、創(chuàng)建Randomwalk類(lèi)

from random import choice
class Randomwalk():
    #一個(gè)生成隨機(jī)漫步數(shù)據(jù)的類(lèi)
    def __init__(self,num_points=5000):
        """初始化隨機(jī)漫步的屬性"""
        self.num_points = num_points
        #所有的隨機(jī)數(shù)據(jù)都起始于(0,0)
        self.x_values = [0]
        self.y_values = [0]

我們先創(chuàng)建一個(gè)類(lèi),創(chuàng)建了x,y兩個(gè)列表并設(shè)置初始數(shù)據(jù)從(0,0)開(kāi)始,隨機(jī)漫步的默認(rèn)點(diǎn)數(shù)為5000,這已經(jīng)足夠的大。此外,我們引入random模塊中的choice函數(shù),來(lái)隨機(jī)生成哪有選擇。

2、選擇方向

def fill_walk(self):
        """計(jì)算隨機(jī)漫步的所有點(diǎn)"""
        while len(self.x_values) < self.num_points:
            #設(shè)置前進(jìn)的方向和距離
            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
            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)

這個(gè)方法主要是告訴python:左走右走?走多少步?上走下走?走多少步?
首先,我們使用了while循環(huán),當(dāng)隨機(jī)數(shù)據(jù)少于我們初定值時(shí),這個(gè)將不斷循環(huán)。

其次,我們使用了choice()函數(shù),用choice(【1,-1】)給x_direction選擇一個(gè)值,結(jié)果要么是向右走的1,要么是向左走的-1,并給定了choice(【0,1,2,3,4】)四個(gè)值隨機(jī)選擇一個(gè)整數(shù),作為步數(shù)x_distance,然后我們用步數(shù)乘以方向作為沿x,y軸移動(dòng)的距離。如果x_step為正,則代表向右走,為負(fù),則代表向左走,為零則垂直移動(dòng);如果y_step為正則向上走,為負(fù)則向下走,為零則水平移動(dòng)。當(dāng)然如果x_step和y_step均為零,則意味著原地不動(dòng),所以我們拒絕這種情況,當(dāng)出現(xiàn)兩者均為零時(shí),我們使用了continue,返回到while循環(huán)繼續(xù)執(zhí)行。

最后,為了持續(xù)獲取x,y的數(shù)值,我們生成一個(gè)列表,每隨機(jī)選擇一個(gè)移動(dòng)數(shù)據(jù),我們就用此移動(dòng)數(shù)據(jù)加上原先的數(shù)據(jù)位置點(diǎn),并將此添加到相應(yīng)的列表末尾,以作下次使用,如:self.x_values[-1]

3、用matplotlib繪制隨機(jī)漫步圖

import matplotlib.pyplot as plt
from randomwalk import Randomwalk
#創(chuàng)建一個(gè)實(shí)例,并將其所包含的點(diǎn)都繪制出來(lái)#
rw = Randomwalk()
rw.fill_walk()
plt.scatter(rw.x_values,rw.y_values,s=15)
plt.show()

首先倒入matplotlib中的pyplot模塊和randomwalk類(lèi),然后創(chuàng)建了Randomwalk實(shí)例,并將其存儲(chǔ)在rw中,在調(diào)用fill_walk,將數(shù)據(jù)傳給scatter()中,并選擇合適的尺寸點(diǎn)。

隨機(jī)生成的圖為(當(dāng)然,每次隨機(jī)生成的圖都是不一樣的):


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

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

  • 我們將使用Python來(lái)生成隨機(jī)漫步數(shù)據(jù),再使用matplotlib將這些數(shù)據(jù)呈現(xiàn)出來(lái)。隨機(jī)漫步的路徑是這樣的:每...
    陳容喜閱讀 556評(píng)論 0 0
  • Matplotlib 入門(mén)教程 來(lái)源:Introduction to Matplotlib and basic l...
    布客飛龍閱讀 32,245評(píng)論 5 162
  • 下午好,親愛(ài)的小伙伴 周檢視韓杰#2018年1月第5周(1.28-2.3) 沒(méi)有反思的人生不值得過(guò) 嘉許自己的每一...
    JIE胭脂雪閱讀 381評(píng)論 0 0
  • 為期七天幼兒師資培訓(xùn)結(jié)束了,感覺(jué)時(shí)間過(guò)得太快了?;叵脒@七天當(dāng)中的點(diǎn)點(diǎn)滴滴,有太多的故事和感動(dòng)!還記得第一天來(lái)到學(xué)校...
    志成媽媽閱讀 437評(píng)論 0 0
  • 一九六七年,當(dāng)時(shí)是哈佛大學(xué)心理學(xué)教授的米爾格蘭姆隨便招募了三百多名志愿者,請(qǐng)他們郵寄一個(gè)信函,目的地是米爾格蘭姆指...
    江蘇葦?shù)?/span>閱讀 623評(píng)論 0 1

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