CHAT with me on luogo!

数据可视化 15.3.4模拟随机漫步-15.3.5设置随机漫步样式

数据可视化

15.3.4模拟随机漫步-15.3.5设置随机漫步样式
rw_visual.py:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

#只要程序处于获得活动状态,就不断地模拟随机漫步
while True:
#创建一个RandomWalk实例
rw = RandomWalk(50_000)#创建实例并存储到rw
rw.fill_walk()#调用

<span class="token comment">#将所有的点都绘制出来</span>
plt<span class="token punctuation">.</span>style<span class="token punctuation">.</span>use<span class="token punctuation">(</span><span class="token string">'classic'</span><span class="token punctuation">)</span>
fig<span class="token punctuation">,</span>ax <span class="token operator">=</span> plt<span class="token punctuation">.</span>subplots<span class="token punctuation">(</span>figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">,</span><span class="token number">9</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment">#figsize:图的尺寸</span>
point_numbers <span class="token operator">=</span> <span class="token builtin">range</span><span class="token punctuation">(</span>rw<span class="token punctuation">.</span>num_points<span class="token punctuation">)</span><span class="token comment">#range生成一个列表,包含的数与漫步包含的点的数量</span>
ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span>rw<span class="token punctuation">.</span>x_values<span class="token punctuation">,</span>rw<span class="token punctuation">.</span>y_values<span class="token punctuation">,</span>c<span class="token operator">=</span>point_numbers<span class="token punctuation">,</span>cmap <span class="token operator">=</span> plt<span class="token punctuation">.</span>cm<span class="token punctuation">.</span>Blues<span class="token punctuation">,</span><span class="token comment">#camp:颜色映射</span>
           edgecolors<span class="token operator">=</span><span class="token string">'none'</span><span class="token punctuation">,</span>s<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token comment">#将随机包含的x值和y值传递给scatter(),并选择合适的尺寸,edgecolors:删除每个点轮廓</span>
<span class="token comment">#突出起点与终点</span>
ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span>c<span class="token operator">=</span><span class="token string">'green'</span><span class="token punctuation">,</span>edgecolors<span class="token operator">=</span><span class="token string">'none'</span><span class="token punctuation">,</span>s<span class="token operator">=</span><span class="token number">100</span><span class="token punctuation">)</span>
ax<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span>rw<span class="token punctuation">.</span>x_values<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>rw<span class="token punctuation">.</span>y_values<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>c<span class="token operator">=</span><span class="token string">'red'</span><span class="token punctuation">,</span>edgecolors<span class="token operator">=</span><span class="token string">'none'</span><span class="token punctuation">)</span><span class="token comment">#c:颜色,edgecolors:删除每个点轮廓,s:大小</span>

<span class="token comment">#隐藏坐标轴。</span>
ax<span class="token punctuation">.</span>get_xaxis<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>set_visible<span class="token punctuation">(</span><span class="token boolean">False</span><span class="token punctuation">)</span>
ax<span class="token punctuation">.</span>get_yaxis<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>set_visible<span class="token punctuation">(</span><span class="token boolean">False</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span>

keep_running <span class="token operator">=</span> <span class="token builtin">input</span><span class="token punctuation">(</span><span class="token string">"Make anther walk? (y/n)"</span><span class="token punctuation">)</span>
<span class="token keyword">if</span> keep_running <span class="token operator">==</span> <span class="token string">'n'</span><span class="token punctuation">:</span>
    <span class="token keyword">break</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

random_walk.py

from random import choice

class RandomWalk:
'一个生成随机漫步德属性'

<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span>num_points<span class="token operator">=</span><span class="token number">5000</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token string">'初始化随机漫步的属性'</span>
    self<span class="token punctuation">.</span>num_points <span class="token operator">=</span> num_points

    <span class="token comment">#所有随机漫步都开始于(0,0)</span>
    self<span class="token punctuation">.</span>x_values <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
    self<span class="token punctuation">.</span>y_values <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>

<span class="token keyword">def</span> <span class="token function">fill_walk</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token string">'计算随机漫步包含的所有点'</span>
    <span class="token string">'一个决定向左或向右,向上或向下走,指定方向走多远的类'</span>
    <span class="token comment">#不断漫步,直到列表达到指定的长度</span>
    <span class="token keyword">while</span> <span class="token builtin">len</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>x_values<span class="token punctuation">)</span> <span class="token operator">&lt;</span> self<span class="token punctuation">.</span>num_points<span class="token punctuation">:</span><span class="token comment">#循环到所需要的点数</span>
        <span class="token string">'决定前进方向以及沿这个方向前进的距离。'</span>
        x_direction <span class="token operator">=</span> choice<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token comment">#方向:1向右,-1向左</span>

        x_directance <span class="token operator">=</span> choice<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token comment">#走的距离随机0——4</span>
        x_setp <span class="token operator">=</span> x_direction <span class="token operator">*</span> x_directance<span class="token comment">#确定x轴和y轴移动的距离,x_setp为正向右,,为负向左,为0垂直移动</span>

        y_direction <span class="token operator">=</span> choice<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
        y_distance <span class="token operator">=</span> choice<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
        y_setp <span class="token operator">=</span> y_direction <span class="token operator">*</span>y_distance<span class="token comment">#y_setp为正向上,,为负向下,为0水平移动</span>

        <span class="token comment">#拒绝原地踏步</span>
        <span class="token keyword">if</span> x_setp <span class="token operator">==</span> <span class="token number">0</span> <span class="token operator">and</span> y_setp <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">:</span>
            <span class="token keyword">continue</span>

        <span class="token comment">#计算下一个点的x值和y值</span>
        x <span class="token operator">=</span> self<span class="token punctuation">.</span>x_values<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">+</span> x_setp
        y <span class="token operator">=</span>self<span class="token punctuation">.</span>y_values<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">+</span> y_setp

        self<span class="token punctuation">.</span>x_values<span class="token punctuation">.</span>append<span class="token punctuation">(</span>x<span class="token punctuation">)</span>
        self<span class="token punctuation">.</span>y_values<span class="token punctuation">.</span>append<span class="token punctuation">(</span>y<span class="token punctuation">)</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

结果:
在这里插入图片描述

2021年5月21日

posted @ 2022-04-03 13:57  qsad阿斯顿  阅读(29)  评论(0编辑  收藏  举报