matplotlib绘图

效果图:

绘制随机漫步图:

先创建一个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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值