关于“Python”的核心知识点整理大全44

目录

​编辑

15.3.4 模拟多次随机漫步

rw_visual.py

注意

15.3.5 设置随机漫步图的样式

15.3.6 给点着色

rw_visual.py

15.3.7 重新绘制起点和终点

rw_visual.py

15.3.8 隐藏坐标轴

rw_visual.py

15.3.9 增加点数

rw_visual.py

15.3.10 调整尺寸以适合屏幕

rw_visual.py

15.4 使用 Pygal 模拟掷骰子

15.4.1 安装 Pygal

注意

15.4.2 Pygal 画廊

15.4.3 创建 Die 类

die.py

15.4.4 掷骰子

die_visual.py

15.4.5 分析结果

die_visual.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


15.3.4 模拟多次随机漫步

每次随机漫步都不同,因此探索可能生成的各种模式很有趣。要在不多次运行程序的情况下 使用前面的代码模拟多次随机漫步,一种办法是将这些代码放在一个while循环中,如下所示:

rw_visual.py
import matplotlib.pyplot as plt
from random_walk import RandomWalk
# 只要程序处于活动状态,就不断地模拟随机漫步
while True:# 创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk() rw.fill_walk()plt.scatter(rw.x_values, rw.y_values, s=15)plt.show()
1 keep_running = input("Make another walk? (y/n): ")
if keep_running == 'n':break 

这些代码模拟一次随机漫步,在matplotlib查看器中显示结果,再在不关闭查看器的情况下暂 停。如果你关闭查看器,程序将询问你是否要再模拟一次随机漫步。如果你输入y,可模拟多次 随机漫步:这些随机漫步都在起点附近进行,大多沿特定方向偏离起点,漫步点分布不均匀等。 要结束程序,请输入n。


注意

如果你使用的是Python 2.7,别忘了将Ø处的input()替换为raw_input()。


15.3.5 设置随机漫步图的样式

在本节中,我们将定制图表,以突出每次漫步的重要特征,并让分散注意力的元素不那么显 眼。为此,我们确定要突出的元素,如漫步的起点、终点和经过的路径。接下来确定要使其不那 么显眼的元素,如刻度标记和标签。最终的结果是简单的可视化表示,清楚地指出了每次漫步经 过的路径.

15.3.6 给点着色

我们将使用颜色映射来指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让它们的颜 色更明显。为根据漫步中各点的先后顺序进行着色,我们传递参数c,并将其设置为一个列表, 其中包含各点的先后顺序。由于这些点是按顺序绘制的,因此给参数c指定的列表只需包含数字 1~5000,如下所示:

rw_visual.py
--snip--
while True:# 创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk()rw.fill_walk()
1 point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,edgecolor='none', s=15)plt.show()keep_running = input("Make another walk? (y/n): ")--snip-- 

在1处,我们使用了range()生成了一个数字列表,其中包含的数字个数与漫步包含的点数相 同。接下来,我们将这个列表存储在point_numbers中,以便后面使用它来设置每个漫步点的颜 色。我们将参数c设置为point_numbers,指定使用颜色映射Blues,并传递实参edgecolor=none以 删除每个点周围的轮廓。最终的随机漫步图从浅蓝色渐变为深蓝色,如图15-9所示。

15.3.7 重新绘制起点和终点

除了给随机漫步的各个点着色,以指出它们的先后顺序外,如果还能呈现随机漫步的起点和 终点就更好了。为此,可在绘制随机漫步图后重新绘制起点和终点。我们让起点和终点变得更大, 并显示为不同的颜色,以突出它们,如下所示:

rw_visual.py
--snip--
while True:--snip--plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,edgecolor='none', s=15)# 突出起点和终点plt.scatter(0, 0, c='green', edgecolors='none', s=100)plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none',s=100)plt.show()--snip--

为突出起点,我们使用绿色绘制点(0, 0),并使其比其他点大(s=100)。为突出终点,我们在 漫步包含的最后一个x和y值处绘制一个点,将其颜色设置为红色,并将尺寸设置为100。请务必 将这些代码放在调用plt.show()的代码前面,确保在其他点的上面绘制起点和终点。 如果你现在运行这些代码,将能准确地知道每次随机漫步的起点和终点(如果起点和终点不 明显,请调整它们的颜色和大小,直到明显为止)。

15.3.8 隐藏坐标轴

下面来隐藏这个图表中的坐标轴,以免我们注意的是坐标轴而不是随机漫步路径。要隐藏坐 标轴,可使用如下代码:

rw_visual.py
--snip--
while True:--snip--plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none',s=100)# 隐藏坐标轴
1 plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)plt.show()--snip-- 

为修改坐标轴,使用了函数plt.axes()(见Ø)来将每条坐标轴的可见性都设置为False。随 着你越来越多地进行数据可视化,经常会看到这种串接方法的方式。 如果你现在运行rw_visual.py,将看到一系列图形,但看不到坐标轴。

15.3.9 增加点数

下面来增加点数,以提供更多的数据。为此,我们在创建RandomWalk实例时增大num_points 的值,并在绘图时调整每个点的大小,如下所示:

rw_visual.py
--snip--
while True:#创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk(50000)rw.fill_walk()# 绘制点并将图形显示出来point_numbers = list(range(rw.num_points)) plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,edgecolor='none', s=1)--snip-- 

这个示例模拟了一次包含50 000个点的随机漫步(以模拟现实情况),并将每个点的大小都 设置为1。最终的随机漫步图更纤细,犹如云朵,如图15-10所示。正如你看到的,我们使用简单 的散点图制作出了一件艺术品!

请尝试修改上述代码,看看将漫步包含的点数增加到多少后,程序的运行速度变得极其缓慢 或绘制出的图形变得很难看。

15.3.10 调整尺寸以适合屏幕

图表适合屏幕大小时,更能有效地将数据中的规律呈现出来。为让绘图窗口更适合屏幕大小, 可像下面这样调整matplotlib输出的尺寸:

rw_visual.py
--snip--
while True:# 创建一个RandomWalk实例,并将其包含的点都绘制出来rw = RandomWalk()rw.fill_walk()# 设置绘图窗口的尺寸plt.figure(figsize=(10, 6))--snip-- 

函数figure()用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize指定一个 元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。

Python假定屏幕分辨率为80像素/英寸,如果上述代码指定的图表尺寸不合适,可根据需要调 整其中的数字。如果你知道自己的系统的分辨率,可使用形参dpi向figure()传递该分辨率,以 有效地利用可用的屏幕空间,如下所示:

plt.figure(dpi=128, figsize=(10, 6))

15.4 使用 Pygal 模拟掷骰子

在本节中,我们将使用Python可视化包Pygal来生成可缩放的矢量图形文件。对于需要在尺寸 不同的屏幕上显示的图表,这很有用,因为它们将自动缩放,以适合观看者的屏幕。如果你打算 以在线方式使用图表,请考虑使用Pygal来生成它们,这样它们在任何设备上显示时都会很美观。

在这个项目中,我们将对掷骰子的结果进行分析。掷6面的常规骰子时,可能出现的结果为 1~6点,且出现每种结果的可能性相同。然而,如果同时掷两个骰子,某些点数出现的可能性将 比其他点数大。为确定哪些点数出现的可能性最大,我们将生成一个表示掷骰子结果的数据集, 并根据结果绘制出一个图形。 在数学领域,常常利用掷骰子来解释各种数据分析,但它在赌场和其他博弈场景中也得到了实际应用,在游戏《大富翁》以及众多角色扮演游戏中亦如此。

15.4.1 安装 Pygal

请使用pip来安装Pygal(如果还未使用过pip,请参阅12.2.1节)。 在Linux和OS X系统中,应执行的命令类似于下面这样:

pip install --user pygal

在Windows系统中,命令类似于下面这样:

python -m pip install --user pygal

注意

你可能需要使用命令pip3而不是pip,如果这还是不管用,你可能需要删除标志--user。


15.4.2 Pygal 画廊

要了解使用Pygal可创建什么样的图表,请查看图表类型画廊:访问http://www.pygal.org/,单 击Documentation,再单击Chart types。每个示例都包含源代码,让你知道这些图表是如何生成的。

15.4.3 创建 Die 类

下面的类模拟掷一个骰子:

die.py
from random import randint
class Die():"""表示一个骰子的类"""
1 def __init__(self, num_sides=6):"""骰子默认为6面"""self.num_sides = num_sidesdef roll(self):""""返回一个位于1和骰子面数之间的随机值"""
2 return randint(1, self.num_sides) 

方法__init__()接受一个可选参数。创建这个类的实例时,如果没有指定任何实参,面数默 认为6;如果指定了实参,这个值将用于设置骰子的面数(见1)。骰子是根据面数命名的,6面 的骰子名为D6,8面的骰子名为D8,以此类推。

方法roll()使用函数randint()来返回一个1和面数之间的随机数(见2)。这个函数可能返回起始值1、终止值num_sides或这两个值之间的任何整数。

15.4.4 掷骰子

使用这个类来创建图表前,先来掷D6骰子,将结果打印出来,并检查结果是否合理:

die_visual.py
from die import Die
# 创建一个D6
1 die = Die()
# 掷几次骰子,并将结果存储在一个列表中
results = []
2 for roll_num in range(100):result = die.roll()results.append(result)
print(results) 

在1处,我们创建了一个Die实例,其面数为默认值6。在2处,我们掷骰子100次,并将每次 的结果都存储在列表results中。下面是一个示例结果集:

[4, 6, 5, 6, 1, 5, 6, 3, 5, 3, 5, 3, 2, 2, 1, 3, 1, 5, 3, 6, 3, 6, 5, 4,1, 1, 4, 2, 3, 6, 4, 2, 6, 4, 1, 3, 2, 5, 6, 3, 6, 2, 1, 1, 3, 4, 1, 4,3, 5, 1, 4, 5, 5, 2, 3, 3, 1, 2, 3, 5, 6, 2, 5, 6, 1, 3, 2, 1, 1, 1, 6,5, 5, 2, 2, 6, 4, 1, 4, 5, 1, 1, 1, 4, 5, 3, 3, 1, 3, 5, 4, 5, 6, 5, 4,1, 5, 1, 2]

通过快速扫描这些结果可知,Die类看起来没有问题。我们见到了值1和6,这表明返回了最 大和最小的可能值;我们没有见到0或7,这表明结果都在正确的范围内。我们还看到了1~6的所 有数字,这表明所有可能的结果都出现了。

15.4.5 分析结果

为分析掷一个D6骰子的结果,我们计算每个点数出现的次数:

die_visual.py
--snip--
# 掷几次骰子,并将结果存储在一个列表中
results = []
1 for roll_num in range(1000):result = die.roll()results.append(result)
# 分析结果
frequencies = []
2 for value in range(1, die.num_sides+1):
3 frequency = results.count(value)
4 frequencies.append(frequency)
print(frequencies)

由于我们将使用Pygal来进行分析,而不是将结果打印出来,因此可以将模拟掷骰子的次数 增加到1000(见1)。为分析结果,我们创建空列表frequencies,用于存储每种点数出现的次 数。在2处,我们遍历可能的点数(这里为1~6),计算每种点数在results中出现了多少次(见3), 并将这个值附加到列表frequencies的末尾(见4)。接下来,我们在可视化之前将这个列表打印 出来: 

[155, 167, 168, 170, 159, 181]

结果看起来是合理的:我们看到了6个值——掷D6骰子时可能出现的每个点数对应一个;我 们还发现,没有任何点数出现的频率比其他点数高很多。下面来可视化这些结果。


关于“Python”的核心知识点整理大全37-CSDN博客

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/303456.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遥感影像辐射定标

遥感影像原始数据中每个像元代表地面光谱反射率的相对大小,叫做DN值。如果要 用于后续的反演或者生成一些反射率等产品时,必须要做辐射定标。 1.光学影像 对于普通光学影像来说,辐射定标可以输出两种:辐亮度和表观反射率…

【http】HTTP/1.0、HTTP/1.1和HTTP/2.0

✨ 专栏介绍 在当今互联网时代,计算机网络已经成为了人们生活和工作中不可或缺的一部分。而要实现计算机之间的通信和数据传输,就需要依靠各种网络协议来进行规范和约束。无论是浏览网页、发送电子邮件还是进行在线交流,都离不开各种各样的网…

C语言—每日选择题—Day64

前言 两天没更新了,作者在复习期末考试,更新一波,祝大家都能顺利通过期末考试!!! 指针相关博客 打响指针的第一枪:指针家族-CSDN博客 深入理解:指针变量的解引用 与 加法运算-CSDN博…

Redis分布式缓存之主从哨兵分片集群

Redis主从 数据同步原理 Redis哨兵 Redis分片集群 集群伸缩:在集群中插入或删除某个节点 集群故障转移

Linux内核中断

Linux内核中断 ARM里当按下按键的时候,他首先会执行汇编文件start.s里面的异常向量表里面的irq,在irq里面进行一些操作。 再跳转到C的do_irq(); 进行操作:1)判断中断的序号;2)处理中断;3)清除中…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例,部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程,具体包括以下步骤: 从 gitee…

基于MATLAB的正态分布与卡方分布(附完整代码与例题)

目录 一. 理论部分 二. MATLAB所使用的函数介绍 2.1 概率密度函数 2.2 概率分布函数 2.3 逆概率分布函数 三. 例题与代码 例题1 例题2 例题3 例题4 一. 理论部分 将连续随机变量的概率密度函数记为,既然跟概率相关,那必然满足两个重要的性质&a…

加速布局!美格智能获国内某自主大厂智能座舱项目模组定点

近日,销售前线又传来重大好消息,美格智能座舱模组正式获得国内某自主大厂前装智能座舱项目定点。此次项目由主机厂直接定点模组,基于美格智能座舱模组SLM925来打造平台化智能座舱解决方案,同时此方案也将会应用于该汽车品牌及旗下…

图灵日记之java奇妙历险记--类和对象

目录 类的定义和使用类的定义格式 类的实例化类和对象的说明 this引用this引用的特性 对象的构造及初始化就地初始化构造方法 封装包导入包中的类自定义包 static成员static修饰成员变量static修饰成员方法 代码块代码块概念及分类构造代码块静态代码块 匿名对象 类的定义和使用…

Transfer Learning(迁移学习)

1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都…

C语言使用蔡勒公式判断日期的星期

引言 在日常编程中,处理日期和时间是一个常见的任务。而了解一个特定日期是星期几,是许多应用程序中的一个基本需求。本篇博客将深入解析一个用于计算星期的 C 语言函数。 代码概览 这个函数使用了蔡勒公式来实现,蔡勒公式(Zel…

【nw.js】使用nw.js将html页面打包成exe免安装程序

文章目录 一、批处理zip命令(已有可跳过此步骤)二、nw.js包三、使用批处理命令打包成exe可执行文件四、使用EnigmaVB打包成免安装可独立运行的exe文件五、结束 一、批处理zip命令(已有可跳过此步骤) 下载zip,你可以到该…