当前位置: 首页 > news >正文

python绘制3D条形图

文章目录

    • 数据导入
    • 三维条形图
    • bar3d

数据导入

尽管在matplotlib支持在一个坐标系中绘制多组条形图,效果如下

在这里插入图片描述

其中,蓝色表示中国,橘色表示美国,绿色表示欧盟。从这个图就可以非常直观地看出,三者自2018到2022年的GDP变化情况。但相比之下,通过增加轴坐标,可以让多组条形图分布在三维坐标中,从而更具表现力。

这里仍然以中美欧GDP为例,如下表所示,单位是万亿美元。

中国美国欧盟
201813.8920.5315.98
201914.2821.3815.69
202014.6921.0615.37
202117.8223.3217.19
202217.9625.4616.64

首先,把这些数值写入python

import numpy as np
years = np.arange(2018, 2023)
areas = ("PRC", "EU", "USA")
GDPS = {'PRC': (13.89, 14.28, 14.69, 17.82, 17.96),'USA': (20.53, 21.38, 21.06, 23.32, 25.46),'EU': (15.98, 15.69, 15.37, 17.19, 16.64),
}

三维条形图

由于想在三维坐标轴中绘图,所以第一步是新建一个子坐标图,并指定projection=3d,然后在绘图时给定一个额外的y坐标,代码如下

import matplotlib.pyplot as plt
import numpy as npax = plt.subplot(projection='3d')
colors = ['r', 'b', 'g']
yticks = [2, 1, 0]
for i,key in enumerate(areas):ax.bar(years, GDPS[key], zs=i, zdir='y', label=key, color=colors[i], alpha=0.8)plt.yticks([])plt.legend()
plt.show()

其中,设置透明度为0.8,这样可以让图像在表现时更有层次感。通过设置label,对三个地区的颜色进行了标注,效果为

在这里插入图片描述

bar3d

上图虽然有了3D坐标轴,但其实每个数据条仍然是二维的,通过bar3d函数,可以绘制更加结实紧固的三维方块图,其绘图参数如下

bar3d(x, y, z, dx, dy, dz, color=None, zsort='average', shade=True, lightsource=None, *args, data=None, **kwargs)

其中,x,y,z是方块图的锚点坐标,dx, dy, dz是方块的长度、宽度和高度。换言之,其绘图逻辑是,先指定其绘图的起始位置,然后按照给定的长宽高绘制长方体。下面的代码就通过bar3d来绘制中美欧的GDP变化

ax = plt.subplot(projection='3d')
dx = dy = np.zeros(5)+0.5
x = years
z = np.zeros_like(x)
for i,key in enumerate(areas):y = z + idz = GDPS[key]ax.bar3d(x,y,z,dx,dy,dz,color=colors[i], alpha=0.8, label=key)plt.yticks([0.5, 1.5, 2.5], areas)
plt.show()

这里对y轴坐标重新进行了映射,从而无需使用label也能清晰地看出每组数据所对应的地区,效果如下

在这里插入图片描述

bar3d函数中其他参数含义如下:

  • zsort z轴排序方案
  • shade 当为True时,会显示3D图的阴影效果
  • lightsource 3D条形图的光源
http://www.lryc.cn/news/99485.html

相关文章:

  • 计算从曲线的起点到param指定的点的曲线段的长度
  • POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 数据压缩和打包处理与数据更新
  • linux----源码安装如何加入到系统服务中(systemclt)
  • Unity 使用UnityWebRequest 读取存档 (IOS只能这样做)
  • Caused by: org.springframework.beans.factory.
  • 【docker 安装】 与【docker-compose 安装】
  • 意外:WPS编程新工具,不用编程,excel用户:可以不用VBA啦
  • GAMES101 笔记 Lecture12 Geometry3
  • Java的内部类
  • 电赛培训(高频电路类赛题)学习总结
  • Rust ESP32C3开发
  • 【Spring Cloud Gateway 新一代网关】—— 每天一点小知识
  • Java 中的关键字 final 和 static
  • Spring Cloud OpenFeign 全教程
  • LLaMA模型论文《LLaMA: Open and Efficient Foundation Language Models》阅读笔记
  • 了解Unity编辑器 之组件篇Effects(十一)
  • 笔记整理-SpringBoot中的扩展点
  • 各系统的目录信息路径
  • Asp.Net 使用Log4Net (封装帮助类)
  • 全志F1C200S嵌入式驱动开发(lcd屏幕驱动)
  • dubbo原理框架设计
  • 【数据挖掘】使用 LSTM 进行时间和序列预测
  • Typescript第四章 函数(声明和调用,注解参数类型,多态,类型别名,泛型)
  • 大数据-Spark批处理实用广播Broadcast构建一个全局缓存Cache
  • Android Service的生命周期,两种启动方法,有什么区别
  • 测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)
  • Go语言网络库net/http
  • Acwing.91 最短Hamilton路径(动态规划)
  • [hfut] [important] v4l2 vedio使用总结/opevx/ffpeg/v4l2/opencv/cuda
  • 2023年深圳杯数学建模A题影响城市居民身体健康的因素分析