Создание трехмерного графика поверхности matplotlib из списков - PullRequest
2 голосов
/ 15 мая 2019

Я хочу создать поверхностный график списков, показанных в коде. Это упрощение данных, которые я буду импортировать из файла Excel, как только разберусь, как их построить.

x и y должны представлять плоскость, из которой возникают значения z. Я создал случайную матрицу для сопряжения со значениями 3x10 из x, y.

Это сообщение об ошибке:

ValueError: несоответствие формы: объекты не могут быть переданы одной фигуре

import matplotlib.pyplot as plt
import numpy as np


x = [0,1,2,3,4,5,6,7,8,9,10] #creating random data
y = [0,1,2,3]
a = np.random.rand (3, 10)

z = np.array(a, ndmin=2) #not really sure if this piece is necessary. 


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

x, y = np.meshgrid(x, y)
ax.plot_surface(x, y, z)
plt.show()

ValueError: несоответствие формы: объекты не могут быть переданы одной фигуре

Я уже пытался пропустить z = np.array(a, ndmin=2). Не сработало.

1 Ответ

1 голос
/ 15 мая 2019

Проблема двоякая:

  • Во-первых, у вас есть 4x11 баллов, а не 3x10 баллов
  • Во-вторых, вам нужно импортировать Axes3D для включения трехмерного построения.Вам не нужно дополнительно использовать z = np.array(a, ndmin=2) Я думаю

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

x = [0,1,2,3,4,5,6,7,8,9,10] #creating random data
y = [0,1,2,3]
a = np.random.rand(4, 11)
x, y = np.meshgrid(x, y)

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

ax.plot_surface(x, y, a)
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...