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

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

思考:

1)每次走动多少个像素,由随机函数决定,每次移动方向也随机确定。由随机方向和随机像素共同移动位置大小和方向。

2)保证将每次移动的位置保存在列表中,供后面matplotlib调用,生成图表。

故而,可以分成两个文件,一个为rand_moving类,生成走动像素、方向,并记录相关数据,保存在数列中,另一个为绘图模块randdraw_visual ,调用matplotlib和rand_moving类,生成一个实例,并调用计算出的数列组生成图表。

一、rand_moving.py文件定义功能如下

1、初始化程序,设置一个参数,即移动的次数,初始化位置全部设置为0

2、随机生成x,y的方向和移动像素,并相乘,得到相对移动距离,即为每次移动的距离和方向,即需要4个随机函数来分别确定水平方向和垂直方向的 移动位置大小和方向,

3,计算出下一个位置,并进行保存到位置数列中,即每走完一步后,在屏幕中的绝对位置。

如下: 

from random import choice  #random是系统自带的随机函数模块

class Rand_moving(): #定义一个Rand_moving类
    def __init__(self,num_times=100000):  # 初始化,设置默认参数为10万,可以修改这个参数试试机器运行速度
        self.num_times = num_times  #移动次数
        
        self.x_values=[0]   # 设置两个数列,用来保存每一步的位置,初始位置为(0, 0),数列元素个数会一直增加到num_times,用来记录每一步的位置信息
        self.y_values=[0]    
        
    def fill_moving(self):  #定义一个函数,用来计算移动方向和距离,并计算需要保存的位置信息
        while len(self.x_values)<self.num_times:#循环不断运行,直到漫步包含所需数量的点num_times
           
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移动的距离 #原地不变 if x_step ==0 and y_step==0: # x_step和 y_step都为零,则意味着原地踏步 continue #计算下一个点的位置坐标x和y值,并分别保存到数列x_values和y_values中 next_x = self.x_values[-1] + x_step #self.x_values[-1]表示是数列最后一个值,初始为x_values=[0] next_y = self.y_values[-1] + y_step self.x_values.append(next_x ) #将每次计算的next_x存入到数列x_values中 self.y_values.append(next_y ) #将每次计算的next_y存入到数列y_values中

二、绘图模块  randdraw_visual.py

绘图模块randdraw_visual.py的功能如下:

1、调用matplotlib和rand_moving类;

2、rand_moving生成一个实例,并计算出的数列组生成图表;

3、用matplotlib中的方法生成图表

import matplotlib.pyplot as plt  #导入matplotlib模块

from rand_moving import *   #也可以用 import random_moving   注意使用过程中的细微差别 ,小写开头的rand_moving是文件(或称为模块,一个模块中可以有一个类,或多个类),大写开头Rand_moving是类。

rm = Rand_moving()  # 利用导入的 Rand_moving 类,创建一个实例rm,这里没有给定参数,默认是10万,可以修改为其他数据。
rm.fill_moving()    # 调用类的方法fill_moving() ,并生成随机数列,存入到x_values和y_values中,

plt.scatter(rm.x_values, rm.y_values,s=15)#调用实例rm中位置数列x_values和y_values生成图表
plt.show()

程序运行效果(注意,为了对比,程序中创建了3个实例,其中一个为默认值,另两个为50万和5万,如果一直没显示,请耐心等会儿!)

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

 上述三个实例处在同一图中,呈现不同颜色,如果只有一个实例,如何修改颜色?

入门(1)中,语句 plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues,edgecolor='none', s=40) 是修改渐变色的,可偿试将randdraw_visual.py模块中进行如下修改:

plt.scatter(rm.x_values, rm.y_values,c=y_values, cmap=plt.cm.Reds,edgecolor='none',s=15)
注: c的参数是字符串,可以直接使用颜色的英文进行赋值,比如:c='yellow',见后面修改起点、终点颜色。
指定一个红色,一个蓝色,实际运行效果(有重复的地方,实例设置为蓝色在后面,将红色盖住):

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

除些之外,还可以对特定的点进行设定,也就是在语句plt.scatter(rm.x_values, rm.y_values,c=y_values, cmap=plt.cm.Reds,edgecolor='none',s=15)之后,再多几个相关语句,并给定相关点坐标。

import matplotlib.pyplot as plt

from rand_moving import *   #也可以用import random_moving注意使用过程中的差别

rm = Rand_moving()  # 创建一个实例rm,这里没有给定参数,默认是10万,可以修改为其他数据。
rm.fill_moving()    # 调用类的方法fill_moving() ,并生成随机数列,存入到x_values和y_values中
plt.scatter(rm.x_values,rm.y_values,c=rm.y_values,cmap=plt.cm.Reds,edgecolor='none',s=15)
#调用实例rm中数列x_values和y_values生成图表#调用实例rm中数列x_values和y_values生成图表

new_rm = Rand_moving(500000)  # 创建一个实例new_rm,是50万次
new_rm.fill_moving()   
plt.scatter(new_rm.x_values,new_rm.y_values,c=new_rm.y_values, cmap=plt.cm.Blues,edgecolor='none',s=15)

# 重绘起点,终点
#因为两个实例的起点一样,只需一个起点即可
plt.scatter(rm.x_values[0], rm.y_values[0],c='yellow',edgecolor='none',s=100)   #设置起点,把s设置较大,以示区别
#两个实例终点不同,分别重绘终点位置 
plt.scatter(rm.x_values[-1], rm.y_values[-1],c='brown',edgecolor='none',s=100)  #设置实例rm的终点,思考为什么用[-1]
plt.scatter(new_rm.x_values[-1], new_rm.y_values[-1],c='pink',edgecolor='none',s=100) #设置实例new_rm的终点

plt.show()

实际运行效果:

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

显示图表屏幕大小

图表适合屏幕大小能有效地将数据中的规律呈现出来,如果要调整屏幕大小,可调整matplotlib输出的尺寸
plt.figure(dpi=128,figsize=(12, 10))
函数 figure() 用于指定图表的宽度、高度、分辨率和背景色。
形参 figsize 指定一个元组
形参 dpi 向 figure() 传递该分辨率

注意:plt.figure(dpi=128,figsize=(12, 10))语句要在其他plt开始语句的前面,才能调整显示屏幕的大小。

import matplotlib.pyplot as plt

from rand_moving import *   #也可以用import random_moving注意使用过程中的差别
#调整屏幕大小
plt.figure(dpi=128,figsize=(12, 10))  #一开始就要定义显示的大小,当然,可以试一下,放到plt.show()之前其他位置的运行效果。

rm = Rand_moving()  # 创建一个实例rm,这里没有给定参数,默认是10万,可以修改为其他数据。
rm.fill_moving()    # 调用类的方法fill_moving() ,并生成随机数列,存入到x_values和y_values中
plt.scatter(rm.x_values,rm.y_values,c=rm.y_values,cmap=plt.cm.Reds,edgecolor='none',s=15)
#调用实例rm中数列x_values和y_values生成图表#调用实例rm中数列x_values和y_values生成图表

new_rm = Rand_moving(500000)  # 创建一个实例new_rm,是50万次
new_rm.fill_moving()   
plt.scatter(new_rm.x_values,new_rm.y_values,c=new_rm.y_values, cmap=plt.cm.Blues,edgecolor='none',s=15)

plt.show()

 当然,还可以试一下他函数功能。 

是不是有点小小的成就感!

请思考:

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

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

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

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

(0)
上一篇 2023年4月2日 下午5:42
下一篇 2023年4月2日 下午5:42

相关文章

  • python入门基础(2)-介绍、基础语法

    一、anaconda下的spyder简介       Spyder 是一个强大的交互式 Python 语言开发环境,提供高级的代码编辑、交互测试、调试等特性,支持包括 Windows、Linux 和 OS X 系统。  windows系统在“开始”菜单下找到anaconda3目录,可以点击spyder打开,也可以通过在anaconda Prompt中输入sp…

    2023年4月2日
    00
  • python入门基础(12)–文件的读写操作

    文本文件可存储的数据量多、每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序 处理文件,让程序能够快速地分析大量的数据处理文件和保存数据可让你的程序使用起来更容易 一、从文件中读取数据1)读取整个文件:先创建一个任意的文本文件,设置任意行,任意个数据,命名为data.txt,如下所示: 415926535897 9323846264…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(5)–Numpy中的相关性函数

    摘要:NumPy中包含大量的函数,这些函数的设计初衷是能更方便地使用,掌握解这些函数,可以提升自己的工作效率。这些函数包括数组元素的选取和多项式运算等。下面通过实例进行详细了解。         前述通过对某公司股票的收盘价的分析,了解了某些Numpy的一些函数。通常实际中,某公司的股价被另外一家公司的股价紧紧跟随,它们可能是同领域的竞争对手,也可能是同一公…

    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入门基础(9)–函数及模块

    函数是带名字的代码块,要执行函数定义的特定任务,可调用该函数。 需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用执行该任务的函数,通过使用函数,程序的编写、阅读、测试和修复都将更容易。主程序文件的组织更为有序 一、如何定义一个函数 使用关键字 def 来定义一个函数。 def greeting_user(): print(“Hel…

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

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

    2023年4月2日
    00
  • python入门基础(11)–类的导入、继承及使用

    在上篇“python中的类的创建、使用和继承”中,创建了Person()和Student()两个类,最后才是程序执行主体,如下:  class Person(): #创建一个person类,父类必须包含在当前文件中,且位于子类前面。 def __init__(self, name, age,hometown): #父类 self.name = name se…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(1)–工具安装及Numpy介绍

    Anaconda 是一个跨平台的版本,通过命令行来管理安装包。进行大规模数据处理、预测分析和科学计算。它包括近 200 个工具包,大数据处理需要用到的常见包有 NumPy 、 SciPy 、 pandas 、 IPython 、 Matplotlib 、 Scikit-learn 、gensim、nltk、networkx、beautifulsoup4和st…

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