【问题标题】:Python: Appending 2D arrays from meshgridPython:从网格网格附加二维数组
【发布时间】:2022-01-02 00:52:09
【问题描述】:

我正在绘制从np.meshgrid 获得的 python 中的两个曲面图,我想附加它们以仅创建一个曲面图。例如:

fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(projection='3d')

# First surface:
x1 = np.linspace(0,1,100)
y1 = np.linspace(0,1,100)
X1,Y1 = np.meshgrid(x1,y1)
Z1 = 2*Y1
solid = ax.plot_surface(X1,Y1,Z1,cmap=cm.coolwarm,linewidth=0, antialiased=True)

# Second surface:
x2 = np.linspace(0,1,100)
y2 = np.linspace(1,2,100)
X2,Y2 = np.meshgrid(x2,y2)
Z2 = 2*Y2
solid = ax.plot_surface(X2,Y2,Z2,cmap=cm.coolwarm,linewidth=0, antialiased=True)

我的第一个想法是在它们后面加上np.append,这样:

X = np.append(X1,X2)
Y = np.append(Y1,Y2)
Z = np.append(Z1,Z2)
solid = ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=True)

但正如预期的那样,由于 Z 被展平,我得到了一个错误,此外,我不确定 X 和 Y 是否正确。在上面的示例中,我如何只创建一个曲面很简单,因为它们都具有相同的角度,但我想解决它们可能具有不同倾角的一般情况。我该如何克服这个问题?提前谢谢!

【问题讨论】:

  • np.appendnp.concatenate 的封面。正如文档告诉你的那样,当没有指定轴时,它会使输入变平。 append 仅适用于为一维数组添加一个数字。对于其他任何事情,请学习使用concatenate

标签: python arrays numpy matplotlib multidimensional-array


【解决方案1】:

我将只填充一个 Z 数组,例如:

fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(projection='3d')

x = np.linspace(0,1,100)
y = np.linspace(0,2,100)
X, Y = np.meshgrid(x, y)
Z = np.empty_like(Y)
Z[Y < 1] = 2 * Y[Y < 1]
Z[Y >= 1] = 10 * Y[Y >= 1] - 8 # different slope
solid = ax.plot_surface(X , Y, Z, cmap=plt.cm.coolwarm, linewidth=0, antialiased=True)

【讨论】:

  • 谢谢@Mark,它可以工作,但是如果我有不同形状的表面(而不是平面)我想附加它可能会变得更复杂,而不是仅仅将两个图加在一起。我使用X=np.append(X1,X2,axis=0); Y=np.append(Y1,Y2,axis=0); Z=np.append(Z1,Z2,axis=0); 得到了一些结果,但我不太确定它是否正确。
  • 你试过np.hstacknp.vstack吗?它们可用于水平堆叠(并排)或垂直堆叠(彼此之上)二维数组。
  • 我去看看。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多