如何用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编程入门的一些基本知识
May 13 Python
Python 的内置字符串方法小结
Mar 15 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
详解python tkinter教程-事件绑定
Mar 28 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
python设置环境变量的原因和方法
Jun 24 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
python源文件的字符编码知识点详解
Mar 04 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
详解Python函数作用域的LEGB顺序
2016/05/14 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
python扫描线填充算法详解
2020/02/19 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
新闻学毕业生自荐信
2013/11/15 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
工会换届选举方案
2014/05/21 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js