改变情节的起源

时间:2013-11-01 14:10:25

标签: python matplotlib plot axis

我有一个包含3列的数据表,我想在彩色2D绘图中根据前两个绘制第三列。例如,对于下表,即

4.0 4.0 0.313660827978 
4.0 5.0 0.365348418405 
4.0 6.0 0.423733120134 
5.0 4.0 0.365348418405 
5.0 5.0 0.439599930621 
5.0 6.0 0.525083754405 
6.0 4.0 0.423733120134 
6.0 5.0 0.525083754405 
6.0 6.0 0.651536351379

我使用以下代码:

x,y,z = np.loadtxt('output_overlap.dat').T #Transposed for easier unpacking
nrows, ncols = final_step_j-1, final_step_k-1
grid = z.reshape((nrows, ncols))
plt.imshow(grid, extent=(x.min(), x.max(), y.max(), y.min()),
           interpolation='nearest', 
           cmap='binary')
fig1 = plt.gcf()
plt.colorbar()
plt.xlabel('m1')
plt.ylabel('m2')
plt.draw()
fig1.savefig('test.pdf', dpi=100)
close('all')

给出了以下情节: https://dl.dropboxusercontent.com/u/31460244/test.png

哪个是对的。现在,我的问题是:如何更改在Y轴上显示数据的顺序?我想在原点得到点(4,4)。

我尝试过更改

plt.imshow(grid, extent=(x.min(), x.max(), y.max(), y.min())

为:

plt.imshow(grid, extent=(x.min(), x.max(), y.min(), y.max())

它确实会更改网格中的数字,但不会更改实际数据。这不是解决方案。有人可以在这里给我一个帮助吗?

1 个答案:

答案 0 :(得分:7)

范围只是将这些角坐标分配给数据,它无论如何都不会改变基础数据的顺序。

imshow有一个origin关键字,请参阅:

a = np.array([0.313660827978, 0.365348418405, 0.423733120134, 
              0.365348418405, 0.439599930621, 0.525083754405, 
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)

extent = [4,6,4,6]

fig, axs = plt.subplots(1,2)

axs[0].imshow(a, extent=extent, interpolation='none')
axs[1].imshow(a, origin='lower', extent=extent, interpolation='none')

enter image description here

您还可以考虑np.flipudnp.fliplr来镜像数组的轴。但我个人更喜欢用imshow来设置原点,如果这已经足够了。