设置形状(x,y,f(x,y))的等高线图的任意轴值?

时间:2014-01-22 00:28:48

标签: python matplotlib axis contour

所以我有一个矩阵形式的数据集:

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是任一轴上的点数。

1 个答案:

答案 0 :(得分: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. 最后,我将绘制原始数据集,以显示它正确地恢复数据。

  4. 您需要将轴值与伪造数据的创建位置进行比较:

    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(),那么我认为这将解决您的问题。

    希望我能正确理解你的问题。