如何用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批量同步web服务器代码核心程序
Sep 01 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
Python实现代码统计工具
Sep 19 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
django为Form生成的label标签添加class方式
May 20 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
python字符串常规操作大全
May 02 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
sae使用smarty模板的方法
2013/12/17 PHP
php邮件发送的两种方式
2020/04/28 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Django入门使用示例
2017/12/12 Python
python模拟事件触发机制详解
2018/01/19 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
python实现周期方波信号频谱图
2018/07/21 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
商场拾金不昧表扬信
2014/01/13 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
大学班级文化建设方案
2014/05/06 职场文书
租车协议书范本2014
2014/11/17 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers