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>


<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">&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>


<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>

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

2021年5月21日

posted @   qsad阿斯顿  阅读(31)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示
哥伦布
01:03发布
哥伦布
01:03发布
9°
西南风
2级
空气质量
相对湿度
46%
今天
2°/14°
周二
4°/16°
周三
6°/19°