如何用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提取html文件中的特定数据的实现代码
Mar 24 Python
Python中用format函数格式化字符串的用法
Apr 08 Python
python从sqlite读取并显示数据的方法
May 08 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
解决python大批量读写.doc文件的问题
May 08 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python argparser的具体使用
Nov 10 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
Django限制API访问频率常用方法解析
Oct 12 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
js运动事件函数详解
2016/10/21 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Django实现快速分页的方法实例
2017/10/22 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
数学高效课堂实施方案
2014/03/29 职场文书
C++程序员求职信范文
2014/04/14 职场文书
ktv筹备计划书
2014/05/03 职场文书
家长建议怎么写
2014/05/15 职场文书
会计学专业求职信
2014/07/17 职场文书
2014年图书室工作总结
2014/12/09 职场文书
助学金感谢信
2015/01/20 职场文书
财务管理制度范本
2015/08/04 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
python中的getter与setter你了解吗
2022/03/24 Python