2014-01-22 82 views
0

所以我有一個數據集是矩陣形式:爲形狀(x,y,f(x,y))的等高線圖設置任意軸值?

x1, Y1, VALUE1 
x2, Y1, VALUE2 
x3, Y1, VALUE3 

x1, Y2, VALUE4 
x2, Y2, VALUE5 
x3, Y2, VALUE6 

等。除了我的x軸和y軸從1,2,3,... N開始,我可以正確地獲得輪廓。這很好,因爲它代表像素,所以不是不正確的,但我想將像素軸的值更改爲實際單位。我似乎無法找到指示輪廓的方法來允許我添加此項。

bsquare=np.reshape(value,(x length,y length)) 
blue=contour(bsquare,colors='b') 
plt.show() 

其中xlength和ylength是任一軸上的點數。

+0

個人而言,我不明白這個問題。如果您提供了一個有效的示例,那麼您生成或寫下的數據會很有幫助。例如,座標軸不能正確表示x和y,但是您不指定它們是什麼或它們應該是什麼;對三胞胎中的數據有什麼意義?典型的等值線圖沒有整數軸(http://matplotlib.org/examples/pylab_examples/contour_demo.html)等。 – tom10

回答

0

plt.contour可以給出陣列X, Y, Z然後花費的Z作爲輪廓值和XY上它們各自的軸線被使用。下面是一個腳本,首先使一些數據一起玩,然後進入你所描述的形式的數組:

import matplotlib.pyplot as plt 
import numpy as np 

# Make some test data 
nx = 2 
ny = 3 
x = np.linspace(0, 3, nx) 
y = np.linspace(50, 55, ny) 
X, Y = np.meshgrid(x, y) 
Z = np.sin(X) + Y 

# Now get it into the form you describe 
data = [[[x[i], y[j], Z[j, i]] for i in range(nx)] for j in range(ny)] 
data = np.array(data) 
print data 

>>> 
[[[ 0.   50.   50.  ] 
    [ 3.   50.   50.14112001]] 

[[ 0.   52.5   52.5  ] 
    [ 3.   52.5   52.64112001]] 

[[ 0.   55.   55.  ] 
    [ 3.   55.   55.14112001]]] 

注意我用的是numpy.array不只是一個普通的名單這是下一步重要的。讓我們分手了該數據,我想你已經做入x和y的值和值本身:

# Now extract the data 
x_values = data[:, :, 0] 
y_values = data[:, :, 1] 
values = data[:, :, 2] 

現在,所有的這些東西都是nx, ny陣列,這是他們具有相同的形狀,你bsquare。您可以通過打印values.shape並更改整數nx, ny來檢查此問題。現在,我將繪製三件事情:

  1. 首先爲你做簡單的等高線圖的值,這會自動將軸值

  2. 其次我繪製使用數組來給出正確的定標和

  3. 最後,我將繪製源數據設置爲顯示它正確恢復數據。

您將需要比較的假數據的創建,其中軸值:

fig, axes = plt.subplots(ncols=3, figsize=(10, 2)) 
axes[0].contour(values) 
axes[1].contour(x_values, y_values, values) 
axes[2].contour(X, Y, Z) 

enter image description here

你如何實現,這將在很大程度上取決於你如何導入您的數據。如果你可以簡單地把它變成numpy.array()那麼我認爲這將解決你的問題。

希望我理解正確的問題。