数据可视化 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>
<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>
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>
<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>
结果:
2021年5月21日
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通