python中15种3D绘图函数总结

 更新时间:2023年09月15日 10:20:49   作者:微小冷  
这篇文章主要为大家详细介绍了python中15种3D绘图函数的用法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下

基础图

一般来说,二维绘图函数在不新增坐标轴的情况下,可以指定一个z轴方向,然后在z=0的平面内进行绘图,支持这种特性的函数有下面这几个

函数坐标参数图形类别
plotx,y曲线图默认z=0
scatterx,y散点图默认z=0
stepx,y步阶图默认z=0
barx,y条形图默认z=0

函数 坐标参数 图形类别 plotx,y曲线图默认z=0scatterx,y散点图默认z=0stepx,y步阶图默认z=0barx,y条形图默认z=0

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(25)/3
y = np.sin(x)
keys = ["plot", "scatter", "step", "bar"]
fig = plt.figure(figsize=(14,4))
for i,key in enumerate(keys, 1):
    ax = fig.add_subplot(1, 4, i, projection="3d")
    fDct = {"plot" : ax.plot,  "scatter"  : ax.scatter,         
            "step" : ax.step,  "bar"      : ax.bar}
    fDct[key](x,y)
    plt.title(key)
plt.tight_layout()
plt.show()

如果可以输入三个坐标,那么就不必指定zdir了,但x,y,z必须是一维数组,只有scatter例外。

函数坐标参数图形类别同名函数
plotx, y, z曲线图
scatterx, y, z散点图可以是二维网格
stepx, y, z步阶图
barx, y, z条形图
stemx, y, z茎叶图

三维图

绘图函数坐标绘图类型坐标说明
plot_surfacex,y,z三维曲面图x,y必须是网格
plot_wireframex,y,z三维网格图x,y必须是网格
plot_trisurfx,y,z三角曲面图x,y,z是一维数组
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
X, Y = np.indices([30, 30])/3 - 5
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure(figsize=(12,5))
ax = fig.add_subplot(131, projection='3d')
ax.plot_surface(X, Y, Z)
plt.title("plot_surface")
ax = fig.add_subplot(132, projection='3d')
ax.plot_wireframe(X, Y, Z)
plt.title("plot_wireframe")
ax = fig.add_subplot(133, projection='3d')
ax.plot_trisurf(X.reshape(-1), Y.reshape(-1), Z.reshape(-1))
plt.title("plot_trisurf")
plt.tight_layout()
plt.show()

误差线

二维坐标中的误差线函数 errorbar 在三维投影下仍然适用,并且支持z方向的误差线

x = np.arange(25)/3
y = np.sin(x)
z = np.cos(x)
y1, y2 = 0.9*y, 1.1*y
x1, x2 = 0.9*x, 1.1*x
z1, z2 = 0.9*z, 1.1*z
xerr = np.abs([x1, x2])/10
yerr = np.abs([y1, y2])/10
zerr = np.abs([z1, z2])/10
fig = plt.figure(figsize=(10,3))
ax = fig.add_subplot(131, projection='3d')
ax.errorbar(x, y, z, yerr=yerr)
plt.title("errorbar with yerr")
ax = fig.add_subplot(132, projection='3d')
ax.errorbar(x, y, z, xerr=xerr)
plt.title("errorbar with xerr")
ax = fig.add_subplot(133, projection='3d')
ax.errorbar(x, y, z, zerr=zerr)
plt.title("errorbar with zerr")
plt.tight_layout()
plt.show()

效果如下

等高线

等高线理所当然地支持三维坐标图,毕竟在没有第三个轴的情况下,等高线图都会用伪彩色来显示高度,现在有了第三个轴,那必须得墙裂支持。

但对于contourf而言,并不会把登高平面衔接起来,所以看上去就像梯田一样,所以不建议在3D坐标中直接绘制contourf图像,而是声名一个z轴,绘制这个z轴方向的投影

X, Y = np.indices([100,100])/30 - 1.5
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)
fig = plt.figure(figsize=(10,3))
ax = fig.add_subplot(131, projection='3d')
ax.contour(X, Y, Z)
plt.title("contour")
ax = fig.add_subplot(132, projection='3d')
ax.contourf(X, Y, Z)
plt.title("contourf")
ax = fig.add_subplot(133, projection='3d')
ax.contourf(X, Y, Z, zdir='y', offset=0)
plt.title("contourf with zdir=y")
plt.tight_layout()
plt.show()

其中,第三幅图是整个等高线图在z轴方向的投影,可以理解为左视图。

场图

场图也是可以支持三维数据的,只不过需要6个坐标而已,记作x,y,z,u,v,w,但流场和风场就不支持三维图像了。

Y, X, Z = np.indices([4,4,4])/0.5 - 3
U = X + Y
V = Y - X
W = X + Y - Z
ax = plt.subplot(projection='3d')
ax.quiver(X, Y, Z, U, V, W,  length=0.2)
plt.title("quiver")
plt.tight_layout()
plt.show()

统计图

hist和boxplot在3D坐标中是可以绘制出来的,但是并不支持指定坐标轴,也不支持指定绘图位置,所以并不建议在3D坐标系中使用,下面仅做下展示

x = np.random.standard_normal(size=1000)
fig = plt.figure(figsize=(9,4))
ax = fig.add_subplot(121, projection='3d')
ax.hist(x)
plt.title("hist")
ax = fig.add_subplot(122, projection='3d')
ax.boxplot(x)
plt.title("boxplot")
plt.tight_layout()
plt.show()

非结构坐标图

tricontour和tricontourf支持三维坐标,而triplot尽管在3维坐标系下不报错,但绘制的其实是二维图像,所以并不推荐。另一方面,和contourf类似,tricontourf所产生从登高面,同样并不会彼此衔接,所以观感其实是比较奇怪的,所以在三维坐标系中,比较推荐的非结构坐标图就只有tricontour这一个。

x = np.random.uniform(-4, 4, 256)
y = np.random.uniform(-2, 2, 256)
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
levels = np.linspace(z.min(), z.max(), 7)
fig = plt.figure(figsize=(9,4))
ax = fig.add_subplot(121, projection='3d')
ax.plot(x, y, z, 'o', markersize=1, alpha=0.5)
ax.tricontour(x, y, z, levels=levels)
plt.title("tricontour")
ax = fig.add_subplot(122, projection='3d')
ax.plot(x, y, z, 'o', markersize=1, alpha=0.5)
ax.tricontourf(x, y, z, levels=levels)
plt.title("tricontourf")
plt.tight_layout()
plt.show()

以上就是python中15种3D绘图函数总结的详细内容,更多关于python绘图函数的资料请关注脚本之家其它相关文章!

相关文章

  • 基于Python制作一个文件解压缩工具

    基于Python制作一个文件解压缩工具

    经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件。本文将用Python制作一个解压缩小工具,以后再也不用下载各种格式的解压缩软件了
    2022-05-05
  • tensorflow 恢复指定层与不同层指定不同学习率的方法

    tensorflow 恢复指定层与不同层指定不同学习率的方法

    今天小编就为大家分享一篇tensorflow 恢复指定层与不同层指定不同学习率的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python操作列表的常用方法分享

    Python操作列表的常用方法分享

    这篇文章主要介绍了Python操作列表的常用方法,需要的朋友可以参考下
    2014-02-02
  • Python unittest模块用法实例分析

    Python unittest模块用法实例分析

    这篇文章主要介绍了Python unittest模块用法,结合实例形式分析了unittest模块功能及相关函数使用技巧,需要的朋友可以参考下
    2018-05-05
  • python如何将数据输出到文件中

    python如何将数据输出到文件中

    这篇文章主要介绍了python如何将数据输出到文件中问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Python使用turtle库绘制科赫雪花详细代码

    Python使用turtle库绘制科赫雪花详细代码

    科赫曲线是一种分形,其形态非常像雪花,因此又被称作科赫雪花、雪花曲线,这篇文章主要给大家介绍了关于Python使用turtle库绘制科赫雪花的相关资料,需要的朋友可以参考下
    2024-05-05
  • Django商城项目注册功能的实现

    Django商城项目注册功能的实现

    注册功能是网页项目必备的需求,本文提供了一个Django项目实现注册功能的示例,有此需求的同学可以参考下
    2021-06-06
  • Python+PyQt5实现网口功能测试详解

    Python+PyQt5实现网口功能测试详解

    这篇文章主要为大家详细介绍了Python+PyQt5实现网口功能测试的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • 深入理解 Python 中的 pip 虚拟环境(最佳实践)

    深入理解 Python 中的 pip 虚拟环境(最佳实践)

    本文深入讲解了Python中pip虚拟环境的概念及其重要性,并详细介绍了如何创建、激活和管理虚拟环境,以及如何使用requirements.txt文件记录和管理项目依赖,文章指出,使用虚拟环境可以有效避免依赖冲突,为每个项目提供一个干净的开发环境,使得项目更易于维护和部署
    2024-10-10
  • pycharm终端无法激活conda环境的解决办法

    pycharm终端无法激活conda环境的解决办法

    如果您在PyCharm终端中无法激活conda环境,可能是由于PyCharm没有正确配置conda解释器,这篇文章主要给大家介绍了关于pycharm终端无法激活conda环境的解决办法,需要的朋友可以参考下
    2023-09-09

最新评论