ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python用pygal.XY实现随机漫步

2019-05-05 19:56:06  阅读:455  来源: 互联网

标签:rw 漫步 Python self XY 随机 pygal


一、pygal.XY类实现绘制数据点的例子(来自官网)

我们重点关注add里面的参数,第一个参数是一个字符串,比如'A',这是我们数据点的标签。第二个参数是一个列表,列表里的每个元素都是一个元组,每个元组里存放了一个点的横纵坐标。

二、用pygal.XY类绘制随机漫步图

randomwalk.py

from random import choice

class Randomwalk():
    '''生成随机漫步数据的类'''
    def __init__(self,num_points=5000):
        self.num_points=num_points
        #我们需要生成5000个随机漫步点

        self.x_values=[0]
        self.y_values=[0]
        #随机漫步从0,0出发,上面两个列表分别存放所有点的横坐标和纵坐标

    def fill_walk(self):
        '''计算随机漫步包含的所有点'''
        while len(self.x_values)<self.num_points:
            #不断漫步,直到得到5000个点
            x_step=self.get_step()
            y_step=self.get_step()

            if x_step==0 and y_step==0:
                continue
                #拒绝原地踏步
            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(self):
        '''计算出每次移动的步长'''
        direction=choice([1,-1])
        distance=choice([0,1,2,3,4])
        step=direction*distance
        #正负不同,漫步的方向就留不同
        return step

rw_pygal.py

from randomwalk import Randomwalk
import pygal

rw=Randomwalk()
#实例化随机漫步类
rw.fill_walk()
#调用fill_walk方法,生成5000个点的横坐标以及纵坐标
points=list(zip(rw.x_values,rw.y_values))
#我们用内置函数zip生成横坐标和纵坐标一一对应的映射,
# 再把得到的迭代器转化为列表,这样就可以直接做add方法的第二个参数了
xy_chart=pygal.XY(stroke=False)
#实例化XY类,参数stroke=False说明我们不需要绘制折线,只要点
xy_chart.add('randomwalk',points)
#把点的标签,横纵坐标设置好
xy_chart.title='Randomwalk'
#把我们图表的标题设置好
xy_chart.render_to_file('r.svg')
#把图表保存为svg文件

以下为我得到的随机漫步图:

标签:rw,漫步,Python,self,XY,随机,pygal
来源: https://blog.csdn.net/weixin_44520259/article/details/89853531

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有