2012-10-04 43 views
7

我有一個簡單的代碼來繪製點在3D的Matplotlib如下 -Matplotlib在三維表面繪製不均勻的數據

​​3210

我的問題是,我試圖讓一個體面面積這些數據指出我有。我已經嘗試使用ax.plot_surface()函數使它看起來不錯。爲此我排除了一些要點,並重新計算了此函數所需的矩陣類型的輸入。 但是,我生成的圖形更難解釋和理解。所以可能有兩種可能性:要麼我沒有正確地使用這個函數,否則我想要繪製的數據對於曲面圖不好。

我期待的是3D圖形,其效果類似於我們的3D餅圖。我們看到一塊(被抽出的)是另一塊的一部分。我並沒有想到它會像這樣完全相同,但是會有這種效果。

我想問的是:

  1. 你是否認爲這將有可能做出這樣的3D圖形?
  2. 有沒有更好的辦法,我可以在三維中表達我的數據?

這裏有2個文件 -

points1.csv

Dim1,Dim2,Dim3 
3,8,1 
3,8,2 
3,8,3 
3,8,4 
3,8,5 
3,9,1 
3,9,2 
3,9,3 
3,9,4 
3,9,5 
3,10,1 
3,10,2 
3,10,3 
3,10,4 
3,10,5 
3,11,1 
3,11,2 
3,11,3 
3,11,4 
3,11,5 
3,12,1 
3,12,2 
3,13,1 
3,13,2 
3,14,1 
3,14,2 
3,15,1 
3,15,2 
3,16,1 
3,16,2 
3,17,1 
3,17,2 
3,18,1 
3,18,2 
4,8,1 
4,8,2 
4,8,3 
4,8,4 
4,8,5 
4,9,1 
4,9,2 
4,9,3 
4,9,4 
4,9,5 
4,10,1 
4,10,2 
4,10,3 
4,10,4 
4,10,5 
4,11,1 
4,11,2 
4,11,3 
4,11,4 
4,11,5 
4,12,1 
4,13,1 
4,14,1 
4,15,1 
4,16,1 
4,17,1 
4,18,1 
5,8,1 
5,8,2 
5,8,3 
5,8,4 
5,8,5 
5,9,1 
5,9,2 
5,9,3 
5,9,4 
5,9,5 
5,10,1 
5,10,2 
5,10,3 
5,10,4 
5,10,5 
5,11,1 
5,11,2 
5,11,3 
5,11,4 
5,11,5 
5,12,1 
5,13,1 
5,14,1 
5,15,1 
5,16,1 
5,17,1 
5,18,1 
6,8,1 
6,8,2 
6,8,3 
6,8,4 
6,8,5 
6,9,1 
6,9,2 
6,9,3 
6,9,4 
6,9,5 
6,10,1 
6,11,1 
6,12,1 
6,13,1 
6,14,1 
6,15,1 
6,16,1 
6,17,1 
6,18,1 
7,8,1 
7,8,2 
7,8,3 
7,8,4 
7,8,5 
7,9,1 
7,9,2 
7,9,3 
7,9,4 
7,9,5 

和points2.csv

Dim1,Dim2,Dim3 
3,12,3 
3,12,4 
3,12,5 
3,13,3 
3,13,4 
3,13,5 
3,14,3 
3,14,4 
3,14,5 
3,15,3 
3,15,4 
3,15,5 
3,16,3 
3,16,4 
3,16,5 
3,17,3 
3,17,4 
3,17,5 
3,18,3 
3,18,4 
3,18,5 
4,12,2 
4,12,3 
4,12,4 
4,12,5 
4,13,2 
4,13,3 
4,13,4 
4,13,5 
4,14,2 
4,14,3 
4,14,4 
4,14,5 
4,15,2 
4,15,3 
4,15,4 
4,15,5 
4,16,2 
4,16,3 
4,16,4 
4,16,5 
4,17,2 
4,17,3 
4,17,4 
4,17,5 
4,18,2 
4,18,3 
4,18,4 
4,18,5 
5,12,2 
5,12,3 
5,12,4 
5,12,5 
5,13,2 
5,13,3 
5,13,4 
5,13,5 
5,14,2 
5,14,3 
5,14,4 
5,14,5 
5,15,2 
5,15,3 
5,15,4 
5,15,5 
5,16,2 
5,16,3 
5,16,4 
5,16,5 
5,17,2 
5,17,3 
5,17,4 
5,17,5 
5,18,2 
5,18,3 
5,18,4 
5,18,5 
6,10,2 
6,10,3 
6,10,4 
6,10,5 
6,11,2 
6,11,3 
6,11,4 
6,11,5 
6,12,2 
6,12,3 
6,12,4 
6,12,5 
6,13,2 
6,13,3 
6,13,4 
6,13,5 
6,14,2 
6,14,3 
6,14,4 
6,14,5 
6,15,2 
6,15,3 
6,15,4 
6,15,5 
6,16,2 
6,16,3 
6,16,4 
6,16,5 
6,17,2 
6,17,3 
6,17,4 
6,17,5 
6,18,2 
6,18,3 
6,18,4 
6,18,5 
7,10,1 
7,10,2 
7,10,3 
7,10,4 
7,10,5 
7,11,1 
7,11,2 
7,11,3 
7,11,4 
7,11,5 
7,12,1 
7,12,2 
7,12,3 
7,12,4 
7,12,5 
7,13,1 
7,13,2 
7,13,3 
7,13,4 
7,13,5 
7,14,1 
7,14,2 
7,14,3 
7,14,4 
7,14,5 
7,15,1 
7,15,2 
7,15,3 
7,15,4 
7,15,5 
7,16,1 
7,16,2 
7,16,3 
7,16,4 
7,16,5 
7,17,1 
7,17,2 
7,17,3 
7,17,4 
7,17,5 
7,18,1 
7,18,2 
7,18,3 
7,18,4 
7,18,5 

回答

25

我看不出哪裏是你的問題,除了你需要網格化你的數據。 這裏是points1.csv您的數據看起來的樣子:

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

fig = plt.figure(figsize=plt.figaspect(0.5)) 
ax = fig.add_subplot(1, 2, 1, projection='3d') 
# note this: you can skip rows! 
my_data = np.genfromtxt('file1.csv', delimiter=',',skiprows=1) 
X = my_data[:,0] 
Y = my_data[:,1] 
Z = my_data[:,2] 

xi = np.linspace(X.min(),X.max(),100) 
yi = np.linspace(Y.min(),Y.max(),100) 
# VERY IMPORTANT, to tell matplotlib how is your data organized 
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic') 

CS = plt.contour(xi,yi,zi,15,linewidths=0.5,color='k') 
ax = fig.add_subplot(1, 2, 2, projection='3d') 

xig, yig = np.meshgrid(xi, yi) 

surf = ax.plot_surface(xig, yig, zi, 
     linewidth=0) 

plt.show() 

enter image description here 我希望這有助於。

+0

非常感謝先生!非常感謝 !!你是上帝的父親! :) – Raj

+5

@RajTendulkar,請......請先饒......先生,當我達到30K時,你可以打電話給我。 – Oz123

+0

是的,絕對是! :)原諒,不能再編輯評論;) – Raj

相關問題