效果图:
绘制随机漫步图:
先创建一个RandwmWalk()类,他随机的选择前进方向
from random import choice
class RandomWalk():
“”“一个生成随机漫步数据的类”“”
#num_points设置默认点数
def init(self, num_points = 5000):
“”“初始化随机漫步的属性”“”
self.num_points = num_points
#所有随机漫步都始于(0, 0)
#创建了两个用于存储x和y值的列表,并让每次漫步都从点(0, 0)出发
self.x_values = [0]
self.y_values = [0]
def fill_walk(self):
“”“计算随机漫步包含的所有点”“”
#不断漫步,直到列表到达指定的长度
while len(self.x_values) < self.num_points:
#决定前进方向以及沿这个方向前进的距离
#1表示向右走的1,-1表示向左走的-1
x_direction = choice([1, -1])
#沿指定方向走多远,choice随机选择一个数字
x_distance = choice([0, 1, 2, 3, 4])
#移动方向乘以移动距离,确定沿x和y轴移动的距离,如果x_self为正将向右移动,为负向左移动
x_step = x_direction * x_distance
y_direction = choice([1, -1])
y_distance = choice([0, 1, 2, 3, 4])
y_step = y_direction * y_distance
#拒绝原地踏步
if x_step == 0 and y_step == 0:
continue
#计算下一个点的x和y值
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
生成简单的漫步图:
import matplotlib.pyplot as plt
from random_walk import RandomWalk
#创建一个RandomWalk实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()
#将随机漫步包含的x和y值传递给scatter(),并选择了合适的点尺寸
plt.scatter(rw.x_values, rw.y_values, s = 5)
plt.show()
生成效果:
给点设置渐变色:
#将所有点数生成一个数字列表
point_number = list(range(rw.num_points))
#将随机漫步包含的x和y值传递给scatter(),并选择了合适的点尺寸
#edgecolor='none’删除每个点周围的轮廓,给点着色
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, edgecolor=‘none’, s = 5)
突出终点和起点:
#突出起点和终点
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.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
调整图表大小:
plt.figure(figsize=(10, 6))
完整代码:
import matplotlib.pyplot as plt
from random_walk import RandomWalk
#创建一个RandomWalk实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()
#设置绘图窗口的尺寸,figure()用于指定图表的宽度和高度,分辨率和背景色,指出绘图窗口的尺寸,单位英寸
plt.figure(figsize=(10, 6))
#将所有点数生成一个数字列表
point_number = list(range(rw.num_points))
#将随机漫步包含的x和y值传递给scatter(),并选择了合适的点尺寸
#edgecolor='none’删除每个点周围的轮廓,给点着色
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, edgecolor=‘none’, s = 5)
#突出起点和终点
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.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
plt.show()
效果图:
直方图——掷骰子案例首先需要安装一下pygal
同样的需要在项目目录中使用pip安装,这里我的项目目录为:E:\2019mcy\pythonWord\matplotlib
python -m pip install --user pygal==1.7
之后创建一个die.py文件,里边存放一个Die()类,骰子的属性类
from random import randint
class Die():
“”“表示一个骰子的类”“”
def init(self, num_sides=6):
“”“骰子默认为6面”“”
self.num_sides = num_sides
def roll(self):
“”“返回一个位于1和骰子面数之间的随机值”“”
return randint(1, self.num_sides)
之后模拟掷骰子,分析和结果,统计没一面出现的次数,结果使用直方图进行统计出来
from die import Die
import pygal
#创建一个D6
die = Die()
#掷几次骰子,并将结果存储在一个列表中
results = []
for roll_num in range(100):
result = die.roll()
results.append(result)
#分析结果
frequencies = []
for value in range(1, die.num_sides+1):
#计算每种点数在results中出现了多少次
frequency = results.count(value)
frequencies.append(frequency)
#对结果进行可视化
hist = pygal.Bar()
#嘴上方标题
hist.title = “Results of rolling one D6 100 times.”
#x轴标签,和x,y轴标题
hist.x_labels = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]
hist.x_title = “Result”
hist.y_title = “Frequency of Result”
#将一系列值添加到图表中
hist.add(‘D6’, frequencies)
#生成svg文件存放在和文件同一目录,可以在浏览器中打开查看
hist.render_to_file(‘die_visual.svg’)
效果图:
同时掷两个面数不同的骰子:
只需是多创建一个Die实例,把骰子面数传递过去,掷骰子是,把两个骰子的面数相加放入列表中,分析结果会有两个骰子面数相加种结果
x轴坐标需要改变一下,具体代码如下:
from die import Die
import pygal
#创建一个D6
die = Die()
die2 = Die(10)
#掷几次骰子,并将结果存储在一个列表中
results = []
for roll_num in range(100):
result = die.roll()+die2.roll()
results.append(result)
#分析结果
frequencies = []
max_result = die.num_sides+die2.num_sides
for value in range(2, max_result+1):
#计算每种点数在results中出现了多少次
frequency = results.count(value)
frequencies.append(frequency)
#对结果进行可视化
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。*
[外链图片转存中…(img-nOCMq3vw-1715828041994)]
[外链图片转存中…(img-UftydpHE-1715828041994)]
[外链图片转存中…(img-ec6Et4cM-1715828041995)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!