繁体   English   中英

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

[英]How to plot 3D surface with X, Y, Z when Z is a list of list in Python?

在我的情况下,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必须是相同形状的2D数组。 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM