2014-01-22 84 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()那么我认为这将解决你的问题。

希望我理解正确的问题。