Как переформатировать 1-мерные входные данные для печати с помощью ax.wireframe или ax.plot_surface? - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в Python. Я прочитал в CSV с 5 переменными и сохранил подмножество 3 переменных (равной длины) в виде списка (1-dim). давайте назовем их x, y и z. Я хочу построить z как «функцию» от x и y. z не является функцией, определенной для x и y, например, если:

x = [1,2,3]
y = [0,1,2]
z = [2,3,4]

Я хочу построить точки (1,0,2), (2,1,3) и (3 , 2,4). мои x, y и z, конечно, намного длиннее (длина 133). Я могу использовать ax.scatter и ax.plot_trisurf для построения моей поверхности, так как они принимают 1-мерный ввод. Но для других функций, таких как каркас или поверхность, они требуют 2-х мерных входов.

Я попытался соединить x и y, а затем объединить z с x или y (результат должен быть таким же, как я считаю). Это определенно приводит к тому, что x и y отображаются правильно, потому что, если я нанесу только x и y как таковые, я получу кривые уровня, которые я должен получить на основе рассеяния сверху. Проблема в том, что для каждой пары x и y у меня есть несколько значений z и, следовательно, несколько поверхностей (я не знаю число, но предположение 133).

Я нашел другой способ построения графика, но очень хочу понять, что здесь происходит и как строить график с использованием meshgrid, где z явно не определяется как функция от x и y, а скорее скаляр значение, как x и y.

Это мой первый пост, так что, пожалуйста, не губите меня, просто ищите помощь! Я также знаю, что я сделал дополнительные шаги, которые мне не нужны, и т. Д. c., Пожалуйста, придерживайтесь topi c, я знаю, что мой код уродлив. Я опубликую свой код и вывод ниже, ( примечание: я знаю, что мне не нужен весь этот код, у меня есть несколько кодов для этого сценария, поэтому в этом примере не все импорты используются. ) спасибо всем!

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3D

X = df['ttm']
x = np.array(X[20:153])
Y = df['delta']
y = np.array(Y[20:153])
Z = df['oiv']
z = np.array(Z[20:153])
fig = plt.figure()

a, b = np.meshgrid(x, y)
a, c = np.meshgrid(x, z)
ax = plt.axes(projection='3d')
ax.scatter(a,b)
ax.plot_surface(a, b, c,cmap='viridis', edgecolor='none')
ax.set_title('Surface plot')
plt.show()

поверхность с «кривыми уровня» вид сбоку для выделения нескольких поверхностей

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