我想使用matplotlib制作给定z函数的3d图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想使用matplotlib制作给定z函数的3d图相关的知识,希望对你有一定的参考价值。

我有一个z函数,它接受x和y参数并返回一个z输出。我想在3d中绘制这个并设置比例。我怎么能这么容易做到?我花了太多时间查看文档,而不是一次我看到了这样做的方法。

答案

绘图样式取决于您的数据:您是否尝试绘制3D曲线(线),曲面或点的散点?

在下面的第一个例子中,我刚刚在域的x-y平面中使用了一个均匀间隔点的简单网格。通常,您首先创建xs和ys的域,然后从中计算zs。

这段代码应该为您提供一个开始玩的例子:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random

def fun(x, y):
    return x + y

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
n = 10
xs = [i for i in range(n) for _ in range(n)]
ys = list(range(n)) * n
zs = [fun(x, y) for x,y in zip(xs,ys)]

ax.scatter(xs, ys, zs)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()


对于曲面,它有点不同,您在2d数组中传入域的网格。这是一个光滑的表面示例:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random

def fun(x, y):
    return x**2 + y

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)

ax.plot_surface(X, Y, Z)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

有关更多示例,请查看文档中的mplot3d tutorial

以上是关于我想使用matplotlib制作给定z函数的3d图的主要内容,如果未能解决你的问题,请参考以下文章

在 matplotlib 中使用带有 x 和 y 的方程和 Python 的 3D 绘图

matplotlib 3d曲面图未显示[重复]

python使用matplotlib可视化3D柱状图(3D histogram三维柱状图包含三个坐标轴xyz)设置zdir参数为z改变3d图观察的角度

带彩色高度的 Matplotlib 3D 瀑布图

matplotlib 中的 3D 离散热图

matplotlib画3D图修改X,Y,Z,colorbar的刻度值