如何用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通过post提交数据的方法
May 06 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
Python爬虫学习之翻译小程序
Jul 30 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
python如何实现DES加密
Sep 21 Python
聊一聊python常用的编程模块
May 14 Python
安装pytorch时报sslerror错误的解决方案
May 17 Python
Pytest中conftest.py的用法
Jun 27 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与ethereum客户端交互
2018/04/28 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
js判断字符长度以及中英文数字等
2013/12/31 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
基于Django用户认证系统详解
2018/02/21 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
Python实现代码统计工具
2019/09/19 Python
Python requests模块session代码实例
2020/04/14 Python
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
高二生物教学反思
2014/01/27 职场文书
店长职务说明书
2014/02/04 职场文书
秸秆管理实施方案
2014/03/15 职场文书
生日寄语大全
2014/04/08 职场文书
文案策划专业自荐信
2014/07/07 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
工程部岗位职责
2015/02/10 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
感恩教育观后感
2015/06/17 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang