如何用Python绘制3D柱形图


Posted in Python onSeptember 16, 2020

本文主要讲解如何使用python绘制三维的柱形图,如下图

如何用Python绘制3D柱形图

源代码如下:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#构造需要显示的值
X=np.arange(0, 5, step=1)#X轴的坐标
Y=np.arange(0, 9, step=1)#Y轴的坐标
#设置每一个(X,Y)坐标所对应的Z轴的值,在这边Z(X,Y)=X+Y
Z=np.zeros(shape=(5, 9))
for i in range(5):
  for j in range(9):
    Z[i, j]=i+j

xx, yy=np.meshgrid(X, Y)#网格化坐标
X, Y=xx.ravel(), yy.ravel()#矩阵扁平化
bottom=np.zeros_like(X)#设置柱状图的底端位值
Z=Z.ravel()#扁平化矩阵

width=height=1#每一个柱子的长和宽

#绘图设置
fig=plt.figure()
ax=fig.gca(projection='3d')#三维坐标轴
ax.bar3d(X, Y, bottom, width, height, Z, shade=True)#
#坐标轴设置
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z(value)')
plt.show()

代码解读:

1、构造需要显示的数据

如下图所示,X坐标取值为[0,1,2,3,4],Y坐标取值为[0,1,2,3,4,5,6,7,8],每一个(X,Y)组合的值Z=X+Y,所需要绘制的图就是在X,Y所对应的坐标位置上面根据Z的值来绘制柱形图。

如何用Python绘制3D柱形图

2、坐标设置

将坐标网格化, X=[0,1,2,3,4],Y=[0,1,2,3,4,5,6,7,8]网格化的结果,如下图所示。可以理解为,X参照Y进行了广播(broadcast), Y参照X进行了广播,分别添加了一个新的维度,并且进行复制。结合xx和yy就得到了所有的X,Y的坐标组合,经过扁平化之后这种对应关系保持不变。代码中的bottom是用来设置绘制每一个柱子的Z坐标的,在此全部都设置为0,而width和height设置每一个柱子的长和宽。

如何用Python绘制3D柱形图

3、bar3d

ax.bar3d(X, Y, bottom, width, height, Z, shade=True):
X,Y:柱子在XY平面的起始坐标
bottom:柱子在Z轴上的起始坐标
width、height:柱子的长宽
Z:数字沿Z轴的长度
shade:是否显示阴影(设置为True立体效果会更好)

shde=True

如何用Python绘制3D柱形图

shade=False

如何用Python绘制3D柱形图

如果需要绘制多个子图,并且里面每一个子图都是3D的,只需要将上述代码进行些许修改即可,案例如下:

fig=plt.figure()
  ax=fig.add_subplot(1, 3, 1, projection='3d')
  ax.bar3d(x, y, z, width, height, top, shade=True)

  ax=fig.add_subplot(1, 3, 2, projection='3d')
  ax.bar3d(x, y, z, width, height, top2, shade=True)

  ax=fig.add_subplot(1, 3, 3, projection='3d')
  ax.bar3d(x, y, z, width, height, top3, shade=True)

  plt.show()

以上就是如何用Python绘制3D柱形图的详细内容,更多关于python绘制柱形图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
python Pygame的具体使用讲解
Nov 03 Python
深入理解Python 关于supper 的 用法和原理
Feb 28 Python
python构建深度神经网络(续)
Mar 10 Python
python实现堆和索引堆的代码示例
Mar 19 Python
Python 通配符删除文件的实例
Apr 24 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
python的移位操作实现详解
Aug 21 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
Jun 04 Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
Python Merge函数原理及用法解析
Sep 16 #Python
简单了解Python字典copy与赋值的区别
Sep 16 #Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 #Python
pycharm2020.2 配置使用的方法详解
Sep 16 #Python
python Matplotlib模块的使用
Sep 16 #Python
Python类成员继承重写的实现
Sep 16 #Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 #Python
You might like
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
javascript Object与Function使用
2010/01/11 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
详解javascript replace高级用法
2019/02/17 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
js实现飞机大战游戏
2020/08/26 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
Python实现图片尺寸缩放脚本
2018/03/10 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
numpy.where() 用法详解
2019/05/27 Python
Django之路由层的实现
2019/09/09 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
什么是命名空间(NameSpace)
2015/11/24 面试题
XML文档面试题
2015/08/05 面试题
大学生职业生涯规划范文
2013/12/31 职场文书
万年牢教学反思
2014/02/15 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
公司奖励通知
2015/04/21 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
python pyhs2 的安装操作
2021/04/07 Python
php访问对象中的成员的实例方法
2021/11/17 PHP
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
canvas 中如何实现物体的框选
2022/08/05 Javascript