2017-03-28 3 views
0

길이가 81, 105이고 그 다음 X 값을 저장하는 (81,105) 배열 (사실리스트 목록)보다 X, Y 값을 저장하는 벡터가 두 개 있습니다. , Y. 이것을 3D로 플롯하는 가장 좋은 방법은 무엇입니까? 이것은 내가 무엇을 시도했다입니다 :두 벡터와 배열로부터의 3 차원 플롯

Z = np.load('Z.npy') 
X = np.load('X.npy') 
Y = np.linspace(0, 5, 105) 
fig = plt.figure(figsize=(6,6)) 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(X, Y, Z, cmap= 'viridis') 
plt.show() 

나는 다음과 같은 오류 얻을 : ValueError를 : 모양이 일치 객체가

+0

Z 데이터는 어디에 있습니까? 나는 그것에 대한 가치를 보지 못했습니까? –

+0

Y 데이터는 코드의 다른 부분에 정의되어 있지만 명확성을 위해 코드를 추가하겠습니다. – Goods

+0

Y가 아니라 Z를 의미합니다. (81, 105)이지만 세 번째 값은 어디에 있습니까? –

답변

1

OK, 나는 실행 그것을 가지고 하나의 형태로 방송 할 수 없습니다. 여기에 몇 가지 트릭이 있습니다. 코드에서 언급 할 것입니다.

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
from random import shuffle 

# produce some data. 
x = np.linspace(0,1,81) 
y = np.linspace(0,1,105) 
z = [[i for i in range(81)] for x in range(105)] 
array_z = np.array(z) 

# Make them randomized. 
shuffle(x) 
shuffle(y) 
shuffle(z) 

# Match data in x and y. 
data = [] 
for i in range(len(x)): 
    for j in range(len(y)): 
     data.append([x[i], y[j], array_z[j][i]]) 
     # Be careful how you data is stored in your Z array. 
# Stored in dataframe 
results = pd.DataFrame(data, columns = ['x','y','z']) 

# Plot the data.  
fig = plt.figure(figsize=(6,6)) 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(results.x, results.y, results.z, cmap= 'viridis') 

enter image description here

I 일부 데이터를 생산하기 때문에 사진이 이상하게 보이는

. 희망이 도움이됩니다.