Как создать трехмерный график поверхности с помощью matplotlib, когда x и y определены как 1d массивы? - PullRequest
0 голосов
/ 13 апреля 2020

Я хотел бы создать трехмерный график поверхности из массивов x, y, z, где len (x) и len (z) = 250, а len (y) = 7

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


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

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

дает мне эта ошибка:

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

Я пробовал meshgrid:

T,U=np.meshgrid(x,b)
surf = ax.plot_surface(T,U,y, cmap=cm.coolwarm,
                   linewidth=0, antialiased=False)

Но это привело к: ValueError («Аргумент Z должен быть 2-мерным.»)

Любая точка в правильном направлении будет принята с благодарностью. Спасибо!

1 Ответ

1 голос
/ 13 апреля 2020

Вам необходимо расширить свои данные, чтобы иметь x и y для каждой точки данных. Это делается путем объединения x и y для формирования массива с той же формой, что и z.

. Вы можете сделать это, используя np.meshgrid:

import numpy as np

x = np.array([1, 2, 3])
y = np.array([5, 6, 7, 8])
z = np.random.rand(4, 3) 

# make sure to take a look hat the keyword 
# indexing : {‘xy’, ‘ij’} and check some (x,y,z) pairs
# to make sure that the values are correct 

xv, yv = np.meshgrid(x, y)
print(xv)
print(yv)
print(xv.shape)
print(yv.shape)
print(z.shape)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...