从存储在 3 个矩阵中的数据使用 Python 实现 3D 绘图

令 M 和 N 为整数。给定一个大小为 (M,1) 的向量 s、一个大小为 (N,1) 的向量 p 和一个大小为 (M,N) 的矩阵 u0。


假设有人想要 3D-plot (s,p) 作为网格和 u0 作为要绘制的函数(z 轴)。当一个人写道:


fig = plt.figure()

ax = fig.gca(projection='3d')

surf = ax.plot_surface(s, p, u0, cmap=cm.coolwarm,

                   linewidth=0, antialiased=False)

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


plt.show()

终端显示以下错误消息:


ValueError: shape mismatch: objects cannot be broadcast to a single shape

然而,尺寸确实匹配!有没有一种方法的3D绘制在网格U0(S,P),而不使用人气指数函数的网格(CF在太多复发例如https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#d- 3d 绘图)?


编辑:这里有一个 MCVE。最初的问题正是以下示例遇到的问题。


import math

from math import *

from mpl_toolkits.mplot3d import Axes3D

import numpy as np

from pylab import plot, axis, savefig, show, title, meshgrid, cm, imshow, contour, clabel, colorbar

from numpy import exp

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D


#


M = 10

N = 20


h = 1/float(M)

l = 1/float(N)


#


s = np.zeros((M + 1, 1))

p = np.zeros((N + 1, 1))


for j in range(0, M + 1):

    s[j] = 0.0 + 5.0*j*h

for k in range(0, N + 1):

    p[k] = 0.0 + 20.0*k*l


#


u0 = np.zeros((M + 1, N + 1))


for j in range(0, M):

    for k in range(0, N):

        u0[j, k] = exp(-(s[j] + p[k] - 10)**2)


#


fig = plt.figure()

ax = fig.gca(projection='3d')

surf = ax.plot_surface(p, s, u0, cmap=cm.coolwarm,

                   linewidth=0, antialiased=False)

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


plt.show()


芜湖不芜
浏览 198回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python