2017-03-28 15 views
0

私はX、Yの値が長さ81,105より大きい2つのベクトルと、それらのXのZ値を格納する(実際にはリストのリスト)(81,105)配列、Y.これを3Dでプロットする最良の方法は何でしょうか?2つのベクトルと配列からの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

私はZではなくYを意味します。(81,105)ですが、3番目の値はどこですか? –

答えて

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 いくつかのデータを生成するので、絵が奇妙に見えます。それが役に立てば幸い。

関連する問題