python数据可视化-matplotlib入门(3)-利用随机函数生成变化图形2

 鉴于上一篇中最后三个问题:

1、上述程序是否能进行优化(比如功能相同的)

2、创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的num_times随机,(n比较大时,num_times应该比较小)

3、当实现上述功能后,程序运行,只输入一个参数(创建实例的个数),就会自动生成对应的num_times,并分别调用相关函数生成对应图表。

 

可以,在类Rand_moving()中计算每一步的方向和移动位置时,都用到了一个乘法公式,

            x_direction = choice([1,-1])       #x的移动方向,1向上,0不变,-1向下
            x_distance = choice([0,1,2,3,4,5]) #x的每次移动的像素,
            x_step = x_direction*x_distance    #移动方向乘以移动距离,以确定沿x移动的距离
            
            y_direction =  choice([1,-1])      #y的移动方向,1向上,0不变,-1向下
            y_distance = choice([0,1,2,3,4,5]) #y的每次移动的像素,
            y_step = y_direction*y_distance    #移动方向乘以移动距离,以确定沿y移动的距离

因此可以整理出一个计算方法,可以直接调用,至于2,3很明显,也是可以完成的。

第一步,将乘法公式提出来单独形成一个作用于自身的方法,代码如下:

    def get_step(self,direction,distance):
          return distance*direction
        
    def fill_moving(self):
        while len(self.x_values)<self.num_times:#循环不断运行,直到漫步包含所需数量的点num_times
            x_step = self.get_step(choice([1,-1]),choice([0,1,2,3,4,5]))     #直接调用get_step方法,使代码更加简洁
            y_step = self.get_step(choice([1,-1]),choice([0,1,2,3,4,5]))

完成第1问,代码变得更加简洁明了。

第2、3个问题:

1)要能生成实例个数n,且还有对应的移动次数num_times,可考虑用字典,即实例个数为key,对应移动次数num_times为键值,当输入2时,如  caselist={’1‘:'150000',’2‘:'250000'}

2)读取字典每个项目,将对应的key和value传递给由Rand_moving类创建的实例,key的个数即为需要创建实例的个数,对应的value值为移动次数。

3)输入数字,即为字典key的个数,存入字典,同时利用随机函数生成一个num_times保存到对应的value中。

 完成思路:

1,重新定义一个类 New_case() 作用:接收一个数据,并根据这个数据自动生成一个字典,

class New_case():
    #定义New_case类
    def __init__(self,numbers): #定义要创建的实例个数        
        self.numbers=numbers     
        self.caselist={}  #定义一个空的caselist字典
        self.case = 0       
       while self.case < self.numbers: #当变量case小于给定值时,
            self.case += 1
            times = choice([100000,150000,200000,250000])#随机选择一个移动次数
            self.caselist[self.case] = times  #将value与key对应

2、需要循环读取字典的key和value,并将value传递给类Rand_moving,随后再运行fill_moving()生成数据并保存到列表,随即用plt.scatter()进行绘图

        for key,value in self.caselist.items(): #字典不为空
            colorkey=str(key)        #  将字典关键字转为字符串存到变量colorkey中
            examplecase = Rand_moving(int(value))  #创建实例,将对应的value值传递类Rand_moving
            examplecase.fill_moving()  #调用类Rand_moving中的方法fill_moving()计算移动相关数据并保存到列表中
            plt.figure(dpi=128,figsize=(12, 10))   #创建画面屏幕          
            plt.scatter(examplecase.x_values,examplecase.y_values,c=self.colors[colorkey],s=15)
        plt.show()

上篇中的代码 c=y_values, cmap=plt.cm.Reds为什么这里不再用,是因为这里循环的时候一直出现红色R
eds,为了对比,创建了一新字典colors{},将生成的个数与颜色相对应。所以上述代码中修改为 c=self.colors[colorkey]

类New_case() 全部代码如下:

import matplotlib.pyplot as plt

from rand_moving import *

class New_case():
    #定义New_case类
    def __init__(self,numbers): #定义要创建的实例个数        
        self.numbers=numbers     
        self.caselist={}  #定义一个空的cases列表
        self.case = 0    #定义一个case变量   
        self.colors={'1':'red','2':'orange','3':'yellow','4':'green','5':'blue','6':'puple'}#创建了一新字典colors{},将生成的个数与颜色相对应
        
        while self.case < self.numbers:  #小于给定实例个数时
            self.case += 1
            times = choice([100000,150000,200000,250000]) #随机生成一个移动次数
            self.caselist[self.case] = times    #将变量case作为key, times作为value保存到字典中      
       
    def case_moving(self):  #重新定义一个方法,即访问字典所有项
        for key,value in self.caselist.items(): #字典不为空
            colorkey=str(key)        #  将字典关键字转为字符串存到变量colorkey中
            examplecase = Rand_moving(int(value))  #创建实例,将对应的value值传递类Rand_moving
            examplecase.fill_moving()  #调用类Rand_moving中的方法fill_moving()计算移动相关数据并保存到列表中
            plt.figure(dpi=128,figsize=(12, 10))   #创建画面屏幕         
            plt.scatter(examplecase.x_values,examplecase.y_values,c=self.colors[colorkey],s=15)#注意调用了上述新字典的颜色
        plt.show()

3、主程序

主程序中有一个交互,需要输入一个数据,然后调用相关相关类创建实例(慢慢成调包侠了!^v^

import matplotlib.pyplot as plt

from rand_moving import *   
from new_case import *

print("Please enter the number:")  #交互,请输入一个数,模拟运行,不需要太大的数据。
n = input()   #将输入的数据保存到变量n中,注意所有输入均为字符串,

testcase = New_case(int(n)) #将n转为整型数据,创建实例个数 
testcase.case_moving()

实际运行效果,输入4,生成4个数据图形(为展示较全,原图已缩小):

python数据可视化-matplotlib入门(3)-利用随机函数生成变化图形2

self.colors={'1':'red','2':'orange','3':'yellow','4':'green','5':'blue','6':'puple'} 注意:图的颜色分别与colors字典中对应。

当然如果觉得数轴很碍眼,那就在类类New_case() 中的plt.figure()之后加上

plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False) 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据可视化-matplotlib入门(3)-利用随机函数生成变化图形2 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python入门基础(5)–数值列表、切片及元组

    列表也非常适合存储一组数字,尤其是大数据处理,处理的几乎都是由数字(如气温、距离、人口数量、经济等)组成的集合。 Python提供很多工具,在数据可视化中,可高效地处理数字列表。 一、数值列表    range() 让你能够轻松地生成一系列的数字 for value in range(1,6):    print(value)# 显示结果为1,2,3,4,5…

    2023年4月2日
    00
  • django基础02–一个基于数据库的小项目

    摘要:简单修改、增加部分页面,了解django开发的过程。(Python 3.9.12,django 4.0.4 ) 接前篇,通过命令: django-admin startproject myWebSite 创立了新的站点,cd myWebSite进入到站点根目录,并用命令python manage.py runserver 8080(或其他端口号) 就可…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(7)–Numpy中矩阵和通用函数

    在NumPy中,矩阵是 ndarray 的子类,与数学概念中的矩阵一样,NumPy中的矩阵也是二维的,可以使用 mat 、 matrix 以及 bmat 函数来创建矩阵。 一、创建矩阵 mat 函数创建矩阵时,若输入已为 matrix 或 ndarray 对象,则不会为它们创建副本。 因此,调用 mat() 函数和调用 matrix(data, copy=F…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(3)

    摘要:先汇总相关股票价格,然后有选择地对其分类,再计算移动均线、布林线等。 一、汇总数据 汇总整个交易周中从周一到周五的所有数据(包括日期、开盘价、最高价、最低价、收盘价,成交量等),由于我们的数据是从2020年8月24日开始导出,数据多达420条,先截取部分时间段的数据,不妨先读取开始20个交易日的价格。代码如下: import numpy as np f…

    2023年4月2日
    00
  • python数据可视化-matplotlib入门(6)-从文件中加载数据

    前几篇都是手动录入或随机函数产生的数据。实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化。 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数据来源。下面详细介绍从文件中加载数据。 一、使用内置的 csv 模块加载CSV文件 CSV文件是一种特殊的文本文件,文件中的数据以逗号作为分隔符,很适合进行数据…

    2023年4月2日
    00
  • python数据可视化-matplotlib入门(2)-利用随机函数生成变化图形

    综合前述的类、函数、matplotlib等,完成一个随机移动的过程(注意要确定移动的次数,比如10万次),每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策确定的,最后显示出每次移动的位置的图表。 思考: 1)每次走动多少个像素,由随机函数决定,每次移动方向也随机确定。由随机方向和随机像素共同移动位置大小和方向。 2)保证将每次移动的位置保存在列…

    2023年4月2日
    00
  • python入门基础(10)–类的创建、使用和继承

    在面向对象编程中,先编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。基于类创建对象时,每个对象都自动具备类的通用行为,同时可根据需要赋予每个对象独特的个性,在实例中存储特定信息及操作根据类来创建对象被称为实例化类,也可以用来扩展既有类的功能,让相似的类能够高效地共享代码 一、创建和使用类、实例 编写一个学生的类,含有名字、年龄、年级、家乡等信息,…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(8)–Numpy中几中常见的图形

    在NumPy中,所有的标准三角函数如sin、cos、tan等均有对应的通用函数。 一、利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线)。利萨茹曲线由以下参数方程定义: x = A sin(at + n/2) y = B sin(bt)利萨茹曲线的参数包括 A 、 B 、 a 和 b 。为简单…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部