python编程从入门到实践-随机漫步全代码

  今天接着写《python编程从入门到实践》一书中的第二个项目数据可视化,说到数据可视化那就必须的说说python和matlab了,因为我是先学习的python,当时上python课时老师带我们使用matplotlib

画的第一个图时,着实让我眼前一亮。(心想原来python这么神奇!)以至于后来学习matlab时,我也是很纠结,明明都学习python了还要学习matlab的有必要吗?

  当时我也是在网上找了好多两者之间的对比,有说python好的,也有说matlab好的,还有说两者各有优缺点的。但是相信大家都知道哈工大被禁用matlab的新闻了。这也是让我深信那句:技多不压身!

多学项技能总归对自己有好处。

言归正传,本书第二个项目分三部分讲解首先是matplotlib模块使用,其次是pygal模块的使用,最后是csv格式和json格式数据文件处理和如何通过API获的数据并处理。

今天主要展示随机漫步的全代码。这主要可以分为两部分,首先是对随机漫步数据的生成,具体我们按照书中那样专门创建一个模块,并在模块中创建一个RandomWalk类。

from random import choice


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

    def __init__(self, num_points=5000):
        """初始化随机漫步的属性"""
        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_step = get_step()
            y_step = get_step()

            # 拒绝原地踏步
            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
            self.x_values.append(next_x)
            self.y_values.append(next_y)


def get_step():
    """生成下一步的x步长或y步长"""
    direction = choice([1, -1])
    distance = choice([0, 1, 2, 3, 4])
    return direction * distance

第二部分是使用matplotlib模块和创建的随机漫步模块来画出需要的图,具体代码如下:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态就一直模仿随机漫步
while True:
    # 创建一个RW实例, 并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()
    plt.figure(dpi=128, figsize=(10, 6))
    point_numbers = list(range(rw.num_points))
    plt.plot(rw.x_values, rw.y_values, linewidth=1)
    # 突出起点和终点
    plt.scatter(0, 0, c='green', edgecolors='None', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='None', s=100)
    # 隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    plt.show()
    keep_running = input("Make another walk?(y/n):")
    if keep_running == "n":
        break

注意rw.fill_walk()的调用执行后,所需要的点坐标分别存放在实例属性rw.x_values和rw.y_values(类型为列表)中。结果如图:

最后,刚开始学习matplotlib模块可以浏览https://matplotlib.org/stable/gallery/index.html里面有很多示例程序,希望能帮到大家。如图:

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有果子的煎饼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值