数据可视化 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"><</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日