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

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为什么这里不再用,是因为这里循环的时候一直出现红色Reds,为了对比,创建了一新字典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个数据图形(为展示较全,原图已缩小):

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入门(2)-利用随机函数生成变化图形2的更多相关文章

  1. python数据处理matplotlib入门(2)-利用随机函数生成变化图形

    综合前述的类.函数.matplotlib等,完成一个随机移动的过程(注意要确定移动的次数,比如10万次),每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策确定的,最后显示出每次移动的位置 ...

  2. python数据处理-matplotlib入门(4)-条形图和直方图

    摘要:先介绍条形图直方图,然后用随机数生成一系列数据,保存到列表中,最后统计出相关随机数据的概率并展示 前述介绍了由点进行划线形成的拆线图和散点形成的曲线图,连点成线,主要用到了matplotlib中 ...

  3. Python 数据处理库 pandas 入门教程

    Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...

  4. Python 绘图库Matplotlib入门教程

    0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...

  5. 转-Python自然语言处理入门

      Python自然语言处理入门 原文链接:http://python.jobbole.com/85094/ 分享到:20 本文由 伯乐在线 - Ree Ray 翻译,renlytime 校稿.未经许 ...

  6. python介绍与入门

    一.python 的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...

  7. 绘图神器-matplotlib入门

    这次,让我们使用一个非常有名且十分有趣的玩意儿来完成今天的任务,它就是jupyter. 一.安装jupyter matplotlib入门之前,先安装好jupyter.这里只提供最为方便快捷的安装方式: ...

  8. Python数据分析-Matplotlib图标绘制

    Matplotlib介绍 Matplotlib是一个强大的Python绘图和数据可视化的工具包. Matplotlib的主要功能 Matplotlib是python中的一个包,主要用于绘制2D图形(当 ...

  9. 《Python编程:从入门到实践》分享下载

    书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...

随机推荐

  1. java面向对象思想之继承

    一.什么是继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为.可以联系生活进行理解,相当于父亲和儿子的关系.父亲有的属 ...

  2. du 和 df 的定义,以及区别?

    du 显示目录或文件的大小 df 显示每个<文件>所在的文件系统的信息,默认是显示所有文件系统.(文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如 i 节点,磁盘分布图,间接块,超 ...

  3. Hystrix相关注解?

    @EnableHystrix:开启熔断 @HystrixCommand(fallbackMethod="XXX"):声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是 ...

  4. Java如何声明一个数组?JS如何声明一个数组?如何获取数组长度

    1 Long[] numbers; //一般使用的定义方式,可分为静态和动态两种定义方式,下有说明. 2 Long numbers[]; //跟上面用法一致. 3 Long... numbers; / ...

  5. @Required 注解 ?

    这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的 属性值或通过自动装配,若@Required 注解的 bean 属性未被设置,容器将抛出 BeanInitializ ...

  6. cpu指令如何读写硬盘

    我们提到cpu的主要作用之一就是控制设备之间的数据交互.这其中自然也包括了硬盘.系统的所有数据基本都在硬盘中,所以知道怎么读写硬盘,对程序来说非常重要,所以我们先来探索下传说中的pio模式. cpu要 ...

  7. canvas 1px 出现模糊解决方法及原理

    关于canvas绘制1像素出现模糊的原因及解决方法 canvas是html5中非常强大的功能,但是在绘制的时候如果出现1像素,例如画一条1像素的线可能出现模糊情况. 一.解决方法 网上比较常见的解决方 ...

  8. 深入HTTP协议

    一.HTTP定义 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. HTTP是一个属于应用层的面向对象协议,由于其简捷.快速的方式, ...

  9. 多态,动态方法调度(dynamic method dispatch)?

    8.多态Polymorphism,向上转型Upcasting,动态方法调度(dynamic method dispatch) 什么叫多态?简言之,马 克 - t o - w i n:就是父类引用指向子 ...

  10. java中当static块和构造函数同时出现,顺序是?

    静态块先于构造函数执行 class Student {    int age;    String name;    static int count;    public Student() {   ...