python 3d图表_python学习笔记:频数分布图与3D柱状图

掷骰子,定义类from random import randint#定义die类class Die():#设置骰子的面数为6 def __init__(self,num_sides=6): self.num_sides=num_sides#方法 roll() 使用函数 randint() 来返回一个 1 和面数之间的随机数 def roll(self): return randint(1,self.num_sides)

2.同时掷两个骰子,生成并保存频数分布图

import pygal#从之前代码中导入创建的类from die import Die# 创建两个 D6 骰子die_1=Die()die_2=Die()# 掷骰子多次,并将结果存储到列表results中results=[]#循环1000次,收集掷骰子的数值结果for roll_num in range(1000):result=die_1.roll()+die_2.roll() results.append(result)#生成列表frequencies,计算不同数值情况下骰子的频次frequencies=[]max_result=die_1.num_sides+die_2.num_sides#计算 2 到 max_result 的各种点数出现的次数#原本可以使用 range(2, 13),但这只适用于两个 D6 骰子。# 模拟现实世界的情形时,最好编写可轻松地模拟各种情形的代码。for value in range(2,max_result+1): frequency=results.count(value) frequencies.append(frequency)#生成条形图,让数据可视化hist = pygal.Bar()hist.title = "Results of rolling two D6 dice 1000 times."hist.x_labels = [ '2', '3', '4', '5', '6','7','8','9','10','11','12']hist.x_title = "Result"hist.y_title = "Frequency of Result"hist.add('D6+D6', frequencies)#保存hist.render_to_file('dice_visual.svg')

0b7b02087bf40ad19c3ebec8aa53ccdba8ecce4c.jpeg?token=4ba985e652fcbda40b8cd07cc88f8d63&s=18A0753203E77B0B10E627E50200E026figure1

3.掷两个面数不同的骰子

这里只需要将2中的代码进行简单修改即可。

# 创建两个 D6 骰子die_1=Die()die_2=Die()

修改为:

# 创建一个 D6 和一个 D10die_1=Die()die_2=Die(10)

另外这里收集数据的次数增加,所以

#循环1000次,收集掷骰子的数值结果for roll_num in range(1000):result=die_1.roll()+die_2.roll() results.append(result)

修改为:

for roll_num in range(5000):result=die_1.roll()+die_2.roll() results.append(result)

其他内容保持不变,得到下图:

6a600c338744ebf80f670cdd25860a2e6159a746.jpeg?token=b4fa04741d2a897e38ecdff732946f0d&s=5CA235728BA65B1B026663E50200B02Efigure2

4.绘制3D柱状图

#导入绘制3D柱状图所需要的包import matplotlib.pyplot as pltimport numpy as npimport matplotlib as mplimport randomfrom mpl_toolkits.mplot3d import Axes3D#设置字体大小mpl.rcParams['font.size'] = 10#生成图纸,绘制3D柱状图子图fig = plt.figure()ax = fig.add_subplot(111, projection='3d')#设置辅助参数,x = np.random.normal(平均数,标准差,生成数值的个数)samples = 25x = np.random.normal(5, 1, samples) # x上正态分布y = np.random.normal(3, .5, samples) # y上正态分布# xy平面上,按照10*10的网格划分,落在网格内个数hist,x划分边界、y划分边界hist, xedges, yedges = np.histogram2d(x, y, bins=10)elements = (len(xedges) - 1) * (len(yedges) - 1)#设置作图点的坐标,meshgrid函数用两个坐标轴上的点在平面上画格xpos, ypos = np.meshgrid(xedges[:-1] + .25, yedges[:-1] + .25)# 多维数组变为一维数组xpos = xpos.flatten()ypos = ypos.flatten()zpos = np.zeros(elements)#变量dx,dy表示每一个矩形条底部的宽度,这里设置xy平面的每一个位置给定的值为0.1个点的宽度dx = .1 * np.ones_like(zpos) # zpos一致的全1数组dy = dx.copy()#定义了柱状图的高度dz = hist.flatten()# 每个立体以(xpos,ypos,zpos)为左下角,以(xpos+dx,ypos+dy,zpos+dz)为右上角ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color='b', alpha=0.4)plt.show()

2f738bd4b31c870124e53130dc00432b0608ff1e.jpeg?token=e46722c3b40185f926ea0c7522f2eb59&s=788C347211C16AFD21F5E2C70100F0A3figure3

5.3D柱状图与散点图

在上述代码基础上增加

#给3D柱状图的x,y,z轴添加标签名

ax.set_xlabel('X Axis')ax.set_ylabel('Y Axis')ax.set_zlabel('Z Axis')

#增加包括x,y轴坐标的散点图子图ax2=fig.add_subplot(212)ax2.scatter(x,y)ax2.set_xlabel('X Axis')ax2.set_ylabel('Y Axis')

因为要绘画两个子图,所以要对上面的代码进行一定的修改:

ax = fig.add_subplot(111, projection='3d')

修改为:ax = fig.add_subplot(211, projection='3d')

00e93901213fb80e3a563104cdaef22abb3894e6.jpeg?token=2b6237dde050f5f6990287396b7c4ca4&s=79A83C7249164ECA48F1EDCE0000F0B2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值