数据漫步练习
in Data Visualization 访问: 720 次 with 0 comment

数据漫步练习

in Data Visualization with 0 comment

J_n_hOa7DoA.jpg

随机漫步

随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。

创建RandomWalk()类

它随机地选择前进方向。这个类需要三个属性,其中一个是存储随机漫步次数的变量,其他两个是列表,分别存储随机漫步经过的每个点的x和y坐标。

#random_walk.py
from random import choice

class RandomWalk():
    """一个生成随机漫步数据的类"""

    def __init__(self,num_points):
        """初始化随机漫步的属性"""
        self.num_points = num_points

        # 所有随机漫步都始于(0, 0)
        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        """计算随机漫步包含的所有点"""

        # 不断漫步,直到列表达到指定的长度
        while len(self.x_values) < self.num_points:
            # 决定前进方向以及沿这个方向前进的距离
            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

            # 计算下一个点的x和y值
            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step

使用choice([1, -1])给x_direction选择一个值,结果要么是表示向右走的1,要么是表示向左走的-1

choice([0, 1, 2, 3, 4])随机地选择一个0~4之间的整数,告诉Python 沿指定的方向走多远

将移动方向乘以移动距离,以确定沿x和y轴移动的距离。

如果x_step和y_step都为零,则意味着原地踏步,我
们拒绝这样的情况,接着执行下一次循环。

Figure_1.png

模拟多次随机漫步

每次随机漫步都不同,因此探索可能生成的各种模式很有趣。

#rw_visual.py
import matplotlib.pyplot as plt 
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    rw = RandomWalk(5000)
    rw.fill_walk()
    plt.scatter(rw.x_values, rw.y_values, s=10)
    plt.show()

    keeping_running = input("Make another walk? (y/n): ")
    if keeping_running == 'n':
        break
设置随机漫步图的样式

使用颜色映射来指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让它们的颜色更明显。为根据漫步中各点的先后顺序进行着色,我们传递参数c,并将其设置为一个列表,其中包含各点的先后顺序。

#rw_visual.py
import matplotlib.pyplot as plt 
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    rw = RandomWalk(5000)
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c = point_numbers, cmap = plt.cm.Blues, edgecolor='none', s=10)
    plt.show()

    keeping_running = input("Make another walk? (y/n): ")
    if keeping_running == 'n':
        break

Figure_2.png

重新绘制起点和终点

可在绘制随机漫步图后重新绘制起点和终点。我们让起点和终点变得更大,并显示为不同的颜色,以突出它们。

#rw_visual.py
import matplotlib.pyplot as plt 
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    rw = RandomWalk(5000)
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c = point_numbers, cmap = plt.cm.Blues, edgecolor='none', s=10)

    # 突出起点和终点
    plt.scatter(rw.x_values[0],rw.y_values[0],c='green', edgecolor='none', s=50)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red', edgecolor='none', s=50)
    plt.show()

Figure_3.png

隐藏坐标轴
#rw_visual.py
import matplotlib.pyplot as plt 
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    rw = RandomWalk(5000)
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c = point_numbers, cmap = plt.cm.Blues, edgecolor='none', s=10)

    # 突出起点和终点
    plt.scatter(rw.x_values[0],rw.y_values[0],c='green', edgecolor='none', s=50)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red', edgecolor='none', s=50)

    # 隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

    plt.show()

函数plt.axes()来将每条坐标轴的可见性都设置为False。

Figure_4.png

50000个点
#rw_visual.py
import matplotlib.pyplot as plt 
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    rw = RandomWalk(50000)
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c = point_numbers, cmap = plt.cm.Blues, edgecolor='none', s=1)

    # 突出起点和终点
    plt.scatter(rw.x_values[0],rw.y_values[0],c='green', edgecolor='none', s=50)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red', edgecolor='none', s=50)

    # 隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

    plt.show()

Figure_5.png

调整尺寸以适合屏幕
# 设置绘图窗口的尺寸
plt.figure(figsize=(10, 6))

函数figure()用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。

Responses