python画图|3D直方图基础教程

前述已经完成了直方图和3D图的基本学习,链接如下:

直方图:python画图|水平直方图绘制-CSDN博客

3D图:python画图|水平直方图绘制-CSDN博客

现在我们尝试把二者结合,画3D直方图。

【1】官网教程

首先,依然是来到官网,链接如下;

Demo of 3D bar charts --- Matplotlib 3.9.2 documentation

官网输出了好看的3D直方图,为此,尝试解读代码。

【2】代码解读

首先是引入numpy和matplotlib模块:

复制代码
import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

然后声明了要画3D图:

复制代码
# set up the figure and Axes
fig = plt.figure(figsize=(8, 3)) #定义要画图
ax1 = fig.add_subplot(121, projection='3d') #声明要画3D图,位于左侧
ax2 = fig.add_subplot(122, projection='3d') #声明要画3D图,位于右侧

再之后定义了一组数据备用:

复制代码
# fake data
_x = np.arange(4) #_x取值[0 1 2 3]
_y = np.arange(5) #_x取值[0 1 2 3 4]
_xx, _yy = np.meshgrid(_x, _y) #生成一个_x和_y组成的矩阵
x, y = _xx.ravel(), _yy.ravel() #使用ravel()把_xx和_yy拉成一维数组

这里稍微复杂一些,因此我们先把数据输出。

前半部分,_x = np.arange(4)=0 1 2 3,_y = np.arange(5)=0 1 2 3 4,这家可以直接看出来的数据,然后出现了_xx和_yy,再之后它们又被拉平成一位数据赋值给x和y。

在编辑器输入以下代码:

python 复制代码
import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

# set up the figure and Axes
fig = plt.figure(figsize=(8, 3)) #定义要画图
ax1 = fig.add_subplot(121, projection='3d') #声明要画3D图,位于左侧
ax2 = fig.add_subplot(122, projection='3d') #声明要画3D图,位于右侧

# fake data
_x = np.arange(4) #_x取值[0 1 2 3]
_y = np.arange(5) #_x取值[0 1 2 3 4]
_xx, _yy = np.meshgrid(_x, _y) #生成一个_x和_y组成的矩阵
x, y = _xx.ravel(), _yy.ravel() #使用ravel()把_xx和_yy拉成一维数组
print('_x=',_x)
print('_y=',_y)
print('_xx=',_xx)
print('_yy=',_yy)
print('x=',x)
print('y=',y)

输出结果为:

_x= 0 1 2 3

_y= 0 1 2 3 4

_xx= \[0 1 2 3

0 1 2 3

0 1 2 3

0 1 2 3

0 1 2 3\]

_yy= \[0 0 0 0

1 1 1 1

2 2 2 2

3 3 3 3

4 4 4 4\]

x= 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3

y= 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4

可见meshgrid把_xx和_yy都定义成5X4矩阵,然后又被ravel都拉成一维矩阵。

换一个说法,_x = np.arange(4)=0 1 2 3,_y = np.arange(5)=0 1 2 3 4,在_x和_y中任取一个数,按照上下两列的形式排列,出来的结果就是x和y。

继续解读:定义直方图的基本属性

复制代码
top = x + y #定义top=x+y
bottom = np.zeros_like(top) #返回一个一维top列的0矩阵
width = depth = 1 #定义width = depth = 1

定义画图和输出图形:

复制代码
ax1.bar3d(x, y, bottom, width, depth, top, shade=True) #定义画3D图,有阴影
ax1.set_title('Shaded') #设置3D图名字Shaded

ax2.bar3d(x, y, bottom, width, depth, top, shade=False) #定义画3D图,无阴影
ax2.set_title('Not Shaded') #设置3D图名字Not Shaded

plt.show() #输出图形

需要注意的是, bottom其实是方块的底部,bottom = np.zeros_like(top)就是要求下一个方块叠放在上一个方块上。

输出结果为;

++图1++

由图1可见,3D直方图左侧有阴影,右侧没有。

【3】总结

本文学习了3D直方图基本画法。

相关推荐
卷无止境12 分钟前
Python 异常处理:从入门到工程实践
后端·python
garuda herb15 分钟前
生成专题页Blog--建立并返回 MySQL 数据库连接
python·mysql
ONE_SIX_MIX19 分钟前
qwenpaw-plugin-file-tools QwenPaw增强文件工具 更新 v1.1.1
python·qwenpaw
AOwhisky22 分钟前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
码农学院41 分钟前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
程序员羽痕41 分钟前
基于 Django + PyTorch 的中文字体识别系统
pytorch·python·django
灯澜忆梦9 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-10 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-10 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白11 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程