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万)

上述三个实例处在同一图中,呈现不同颜色,如果只有一个实例,如何修改颜色?
入门(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',见后面修改起点、终点颜色。
指定一个红色,一个蓝色,实际运行效果(有重复的地方,实例设置为蓝色在后面,将红色盖住):

除些之外,还可以对特定的点进行设定,也就是在语句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()
实际运行效果:

显示图表屏幕大小
图表适合屏幕大小能有效地将数据中的规律呈现出来,如果要调整屏幕大小,可调整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()
当然,还可以试一下他函数功能。
python数据处理matplotlib入门(2)-利用随机函数生成变化图形的更多相关文章
- python数据处理-matplotlib入门(2)-利用随机函数生成变化图形2
鉴于上一篇中最后三个问题: 1.上述程序是否能进行优化(比如功能相同的) 2.创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的num_times随机 ...
- python数据处理-matplotlib入门(4)-条形图和直方图
摘要:先介绍条形图直方图,然后用随机数生成一系列数据,保存到列表中,最后统计出相关随机数据的概率并展示 前述介绍了由点进行划线形成的拆线图和散点形成的曲线图,连点成线,主要用到了matplotlib中 ...
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
- Python 绘图库Matplotlib入门教程
0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...
- 转-Python自然语言处理入门
Python自然语言处理入门 原文链接:http://python.jobbole.com/85094/ 分享到:20 本文由 伯乐在线 - Ree Ray 翻译,renlytime 校稿.未经许 ...
- python介绍与入门
一.python 的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...
- 绘图神器-matplotlib入门
这次,让我们使用一个非常有名且十分有趣的玩意儿来完成今天的任务,它就是jupyter. 一.安装jupyter matplotlib入门之前,先安装好jupyter.这里只提供最为方便快捷的安装方式: ...
- Python数据分析-Matplotlib图标绘制
Matplotlib介绍 Matplotlib是一个强大的Python绘图和数据可视化的工具包. Matplotlib的主要功能 Matplotlib是python中的一个包,主要用于绘制2D图形(当 ...
- 《Python编程:从入门到实践》分享下载
书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...
随机推荐
- automake的使用1
安装命令: sudo apt install automake autoconfig 简单的例子 automake实例: helloworld.c #include <stdio.h> # ...
- Eclipse建立Web项目,手动生成web.xml文件
相关文章:https://blog.csdn.net/ys_code/article/details/79156188(Web项目建立,手动生成web.xml文件
- websocket 实现简单网页版wechat
1.群聊 web - socket--基于TCP/UDP http - 无状态的短链接 长连接:客户端和服务器保持永久性的链接,除非有一方主动断开, 轮询:客户端和服务端不断连接,然后断开,请求响应; ...
- JVM的基础知识
一.JVM的基础知识 1.JVM内存结构: 1.JVM堆内存结构: 2.JVM内存分配: 3.Java的堆机构和垃圾回收: 4.Jvm堆内存配置参数: 5.JVM新生代概念和配置: 6.JVM老生代概 ...
- JavaScript的取值小技巧之“中括号[]取值法”
一.简介 做下记录,今天看了一篇很有意思的文章,学到了这个取值的小技巧 正常的话我们一般都是用对象直接去'.'对应的属性名(也就是键值对的键)来获取对应的值 这里记录的是另一种取值方式,他是采用中括号 ...
- c语言思维导图
- PID控制算法的C语言实现
参考: PID控制器开发笔 浅谈位置式PID 专家PID控制在快速系统中的仿真及应用(这篇了论文介绍的积分分离PID.专家PID(脚本实现和simulink实现)很详细) PID控制算法的C语言实现一 ...
- testview属性之详解
安卓开发当中TextView是最常用的组件之一了,那么现在就来详细的了解下TextView的属性: Android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示 ...
- 现代CSS进化史
英文:https://medium.com/actualize-...编译:缪斯 CSS一直被web开发者认为是最简单也是最难的一门奇葩语言.它的入门确实非常简单--你只需为元素定义好样式属性和值,看 ...
- Vue3生命周期的理解
beforeCreate():在实例生成之前 created():在实例生成之后 beforeMount():在模板已经被编译成函数之后,组件内容被渲染到页面之前 mounted():在组件内容被渲染 ...