如何用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自动化构建工具scons使用入门笔记
Mar 10 Python
scrapy爬虫实例分享
Dec 28 Python
django_orm查询性能优化方法
Aug 20 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
Python绘制组合图的示例
Sep 18 Python
Django模型层实现多表关系创建和多表操作
Jul 21 Python
python基础之文件操作
Oct 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数据采集的详解
2013/06/02 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
Django实现学生管理系统
2019/02/26 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
python3判断IP地址的方法
2021/03/04 Python
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
会计电算化个人自我评价
2013/11/17 职场文书
企业承诺书怎么写
2014/05/24 职场文书
检讨书1000字
2014/10/11 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
学校重阳节活动总结
2015/03/24 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
小程序实现侧滑删除功能
2022/06/25 Javascript