如何用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实现问号表达式(?)的方法
Nov 27 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Python2包含中文报错的解决方法
Jul 09 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
Python实现基于POS算法的区块链
Aug 07 Python
详解python Todo清单实战
Nov 01 Python
python 爬取学信网登录页面的例子
Aug 13 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
学点简单的Django之第一个Django程序的实现
Feb 24 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
从手册去理解分析PHP session机制
2011/07/17 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
一段实时更新的时间代码
2006/07/07 Javascript
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
Python简单进程锁代码实例
2015/04/27 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
python3安装speech语音模块的方法
2018/12/24 Python
python全栈知识点总结
2019/07/01 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
化妆师职业生涯规划书
2014/02/16 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
地道战观后感2000字
2015/06/04 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
JavaScript组合继承详解
2021/11/07 Javascript
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript