如何用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中pop和remove的使用方法
Jan 09 Python
使用Python实现在Windows下安装Django
Oct 17 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
Python切图九宫格的实现方法
Oct 10 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
Pandas加速代码之避免使用for循环
May 30 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
PHP crc32()函数讲解
2019/02/14 PHP
新浪的图片新闻效果
2007/01/13 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
windows下ipython的安装与使用详解
2016/10/20 Python
Django REST framework内置路由用法
2019/07/26 Python
opencv实现简单人脸识别
2021/02/19 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
如何一键升级Python所有包
2020/11/05 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
工程质量承诺书范文
2014/03/27 职场文书
聘任书模板
2014/03/29 职场文书
体育运动口号
2014/06/09 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python