python画图|3D bar进阶探索

news/2024/9/19 14:45:16 标签: python, 开发语言

前述学习过程只能怪,已经探究了3D直方图的基础教程,详见下述链接:

python画图|3D直方图基础教程-CSDN博客

实际上,基础文章直接进入了堆叠教程,相对来说基础的程度不够,因此有必要再次探索。

【1】官网教程

首先还是来到官网,学习官方的教程:

bar3d(x, y, z, dx, dy, dz) — Matplotlib 3.9.2 documentation

教程非常简洁,我们做一下解读。

【2】代码解读

首先是numpy和matplotlib的引入:

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

然后对图形风格做了指引,暂不作为解读重点:

plt.style.use('_mpl-gallery') #设置画图颜色等风格

然后定义了变量:

# Make data
x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [0, 0, 0, 0] #定义变量
dx = np.ones_like(x)*0.5 #dx的输出结果都是0.5,和x的维度一致
dy = np.ones_like(x)*0.5 #dy的输出结果都是0.5,和x的维度一致
dz = [2, 3, 1, 4] #dz的结果

这段代码相对简单,需要注意的是:

dx = np.ones_like( )的功能是:输出全是1的数组,数组的维度和like()括号中的数组一致。

dx = np.ones_like(x)输出全是1的数组,数组的维度和x的维度(1X4)一致为测试这个功能,输入以下代码后运行:

python">import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

plt.style.use('_mpl-gallery') #设置画图颜色等风格

# Make data
x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [0, 0, 0, 0] #定义变量
dx = np.ones_like(x)*0.5
dy = np.ones_like(x)*0.5
dz = [2, 3, 1, 4]

print('np.ones_like(x)=\n',np.ones_like(x))

输出结果为:

np.ones_like(x)=
 [1 1 1 1]

再之后,就定义了要画3D直方图:

# Plot
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) #定义要画3D图
ax.bar3d(x, y, z, dx, dy, dz) #定义画3D直方图

 其中,ax.bar3d(x, y, z, dx, dy, dz)函数,(x, y, z,)代表了需要绘制的3个坐标,(dx, dy, dz)代表了每个直方图的长度、宽度和高度。

最后设置了坐标轴和进行图形输出:

ax.set(xticklabels=[],
       yticklabels=[],
       zticklabels=[])  #设置坐标轴

plt.show() #输出图形

输出结果为:

图1

【3】修改代码

【3.1】显示坐标轴刻度

图1虽然画出了3D直方图,但坐标轴没有刻度尺寸。因此尝试修改坐标轴属性代码,使坐标轴显示刻度尺寸。

将ax.set部分拆开,写成下述形式:

ax.set_xticklabels=([])  #设置坐标轴
ax.set_yticklabels=([])
ax.set_zticklabels=([])  #设置坐标轴

此时的输出结果为:

图2

由图2可见,输出结果显示了坐标轴刻度标签。

【3.2】显示坐标轴标签

图2虽然显示了坐标轴刻度尺寸,但没有显示各个轴的名称,因此有必要继续增加代码,显示轴标签:

ax.set_xlabel("x", color="g", fontsize=20) #设置x轴标签
ax.set_ylabel("y", color="g", fontsize=20) #设置y轴标签
ax.set_zlabel("z", color="g", fontsize=20) #设置z轴标签

plt.show() #输出图形

此时的输出结果为:

图3

图3显示了坐标轴标签。

【4】改写代码

 前述图形对3D直方图做了一些完善,但实际上可修改的地方还很多。由于明显的修改将会显著区别于官网图形,因此要重新开一个章节。

首先,将最先约束画图风格的代码改为注释:

#plt.style.use('_mpl-gallery') #设置画图颜色等风格

然后,给3dbar设置颜色:

ax.bar3d(x, y, z, dx, dy, dz,color='y',alpha=0.58) #定义画3D直方图

这里的 color='y'表示图形为黄色;alpha=0.58表示不透明度,alpha越大越不透明,1为完全不透明。

再然后把变量做修改,使其尽可能有区别:

x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [3,5,6,5] #定义变量
dx = np.ones_like(x)*0.5 #dx的输出结果都是0.5,和x的维度一致
dy = np.ones_like(x)*0.5 #dy的输出结果都是0.5,和x的维度一致
dz = [1,2,3,4] #dz的结果

再给图形加一个名称:

ax.set_title('3Dbar')

此时的输出图形为:

图4

由图4可以看到不同的方块似乎起始高度不一样,因此尝试改变试图角度:

图5

此时非常清晰,方块的起始高度是z = [3,5,6,5],然后方块的具体高度是dz = [1,2,3,4] 。

至此的完整代码为:

python">import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算
from scipy.ndimage import label
from sympy.abc import alpha

#plt.style.use('_mpl-gallery') #设置画图颜色等风格

# Make data
x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [3,5,6,5] #定义变量
dx = np.ones_like(x)*0.5 #dx的输出结果都是0.5,和x的维度一致
dy = np.ones_like(x)*0.5 #dy的输出结果都是0.5,和x的维度一致
dz = [1,2,3,4] #dz的结果

# Plot
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) #定义要画3D图
ax.bar3d(x, y, z, dx, dy, dz,color='y',alpha=0.58) #定义画3D直方图

#ax.set(xticklabels=[],
#      yticklabels=[],
#      zticklabels=[]
#      )
ax.set_xticklabels=([])  #设置坐标轴
ax.set_yticklabels=([])
ax.set_zticklabels=([])  #设置坐标轴
ax.set_xlabel("x", color="g", fontsize=20) #设置x轴标签
ax.set_ylabel("y", color="g", fontsize=20) #设置y轴标签
ax.set_zlabel("z", color="g", fontsize=20) #设置z轴标签
ax.set_title('3Dbar')
plt.show() #输出图形

【5】总结

学习了3D直方图的绘制教程,显示了坐标轴刻度标签和名称标签,增加了图名,修改了方块颜色。


http://www.niftyadmin.cn/n/5665724.html

相关文章

软件工程测试

1. 软件测试概述 通俗地说,软件测试是为了发现错误而执行程序的过程。 软件测试:根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序…

【算法】堆与优先级队列

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)最后一块石头的重量 .1- 题目解析 .2- 代码编写 2)数据流中的第 K 大元素 .1- 题目解析 .2- 代码编写 3)前K个高频单词 .1- 题目解析 .2- 代码编写 4&#xf…

YooAsset基础操作及热更

配置环境直接查看官方文档或者参考其他博客,本篇只讲如何使用 官方文档 1.input官方示例小飞机demo 2.打开这两个窗口 Collector用于管理资源,Builder用于打包 3.利用python创建一个http文件夹服务器(必须有python及其环境变量)…

【启明智显技术分享】model4应用OPENWRT系统开发,调节RGB屏时花屏怎么解决

在利用Model 4进行OPENWRT系统开发时,遇到RGB屏幕花屏问题是一个常见的挑战。Model 4作为一款功能强大的HMI芯片SOC,支持多种接口和强大的多媒体处理能力,包括RGB、MIPI、LVDS、SPI等显示接口,RJ45网络接口,8路串口&am…

GEE 教程:利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据分析

目录 简介 数据 哨兵5号 NOAA/VIIRS/DNB/MONTHLY_V1/VCMCF 函数 ui.Chart.image.series(imageCollection, region, reducer, scale, xProperty) Arguments: Returns: ui.Chart 代码 结果 简介 利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据…

视频美颜SDK与直播美颜工具的实现原理与优化方案

本篇文章,小编将为大家详细讲解视频美颜SDK的实现原理,并提出优化方案。 一、视频美颜SDK的实现原理 1.图像采集与处理 2.人脸识别与关键点检测 3.美颜滤镜与特效处理 4.实时性与低延迟 二、直播美颜工具的实现原理 直播美颜工具与视频美颜SDK的…

Docker 镜像制作(Dockerfile)

1 Dockerfile 概念 Dockerfile 是什么? 镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,这个脚本就是 Dockerfile。 Dockerfile 是一个文本文件&a…

数据库———事务及bug的解决

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你! 目录 一:事务 1:场景引入 2:“回滚” 3:恢复机制(un…