我有一个包含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())
它确实会更改网格中的数字,但不会更改实际数据。这不是解决方案。有人可以在这里给我一个帮助吗?
答案 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')
您还可以考虑np.flipud
和np.fliplr
来镜像数组的轴。但我个人更喜欢用imshow来设置原点,如果这已经足够了。