gpt4 book ai didi

python - 当 Z 是 Python 中的列表时,如何用 X、Y、Z 绘制 3D 表面?

转载 作者:行者123 更新时间:2023-12-01 05:12:50 26 4
gpt4 key购买 nike

在我的例子中,X是一个范围(0, 100),Y是一个范围(0, 10),Z是一个列表的列表。 Z 与 X 的长度相同,均为 100,Z 内的每个元素列表与 Y 的维度相同。

Z = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ..., [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]。

我有以下代码,但它不起作用,它提示两个或多个数组在轴 1 上具有不兼容的尺寸。

fig = plt.figure(figsize=(200, 6))
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.set_xticklabels(x_ax)
ax.set_yticklabels(y_ax)
ax.set_title("my title of chart")

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)

ax.set_zlim(0, 100)

fig.colorbar(surf, shrink = 0.5, aspect = 5)
plt.show()

我猜错误是由于Z的数据结构引起的,如何制作与X和Y兼容的结构?谢谢

最佳答案

这是基本的 3D 曲面绘制程序。看来您的 XY 只是一维数组。但是,XYZ 必须是相同形状的二维数组。 numpy.meshgrid 函数对于从两个 1D 数组创建 2D 网格非常有用。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.array(np.linspace(-2,2,100))
y = np.array(np.linspace(-2,2,10))
X,Y = np.meshgrid(x,y)

Z = X * np.exp(-X**2 - Y**2);

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
fig.colorbar(surf, shrink = 0.5, aspect = 5)

plt.show()

关于python - 当 Z 是 Python 中的列表时,如何用 X、Y、Z 绘制 3D 表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23815004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com