python matplotlib 更改图像默认坐标轴

1 投票
1 回答
4475 浏览
提问于 2025-04-17 14:37

我遇到了一个有趣的情况。

我有一张带坐标轴的图像。

IMG

当我尝试用下面的代码来绘制这个图的时候:

plt.figure("Ti Zr")
ax = plt.subplot(111)
im = plt.imshow(np.flipud(plt.imread('Ti_ZrB.png')), 
    origin='lower', 
    extent=[0, 800, 1000, 32700])
plt.xticks([10,15, 43, 95, 215,542,800])
plt.yticks([1000, 1860, 2670, 8600, 16600,32700])

plt.axis('normal')
plt.show()

在上传这张图片之前,我只是用Corel把坐标轴上的数字剪掉了。最后我得到了这个:

IMG

你可以看到,坐标轴的位置发生了偏移,它们没有在正确的位置上。通常我用这种方法来绘制图表,以前没有遇到过任何问题。但现在我不知道该怎么办。谢谢大家的帮助,我会非常感激的。

1 个回答

4

你可以在matplotlib中使用鼠标点击事件,这样就能轻松找到刻度的坐标,而不用去猜测。

import numpy as np
import matplotlib.pyplot as plt

def tell_click_coordinates(event):
    print "X: %.0f, Y: %.0f" % (event.xdata, event.ydata)

fig = plt.figure("Ti Zr")
fig.canvas.mpl_connect("button_press_event", tell_click_coordinates)

ax = plt.subplot(111)
im = plt.imshow(np.flipud(plt.imread('14675002_in.png')), 
    origin='lower', 
    extent=[0, 800, 1000, 32700])
plt.xticks([10,15, 43, 95, 215,542,800])
plt.yticks([1000, 1860, 2670, 8600, 16600,32700])

plt.axis('normal')
plt.show()

依次点击每个刻度,你会得到:

X: 6, Y: 1576
X: 6, Y: 6902
X: 10, Y: 13037
X: 8, Y: 20415
X: 11, Y: 26383
X: 76, Y: 2177
X: 260, Y: 1846
X: 494, Y: 1846
X: 594, Y: 1680
X: 715, Y: 1928

然后,你可以用这些值来调整你的图表:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure("Ti Zr")

ax = plt.subplot(111)
im = plt.imshow(np.flipud(plt.imread('14675002_in.png')), 
    origin='lower', 
    extent=[0, 800, 1000, 32700])
plt.xticks([76,260,494,594,715,800],[10,15, 43, 95, 215,542,800])
plt.yticks([1576,6902, 13037, 20415, 26383, 32700],[1000, 1860, 2670, 8600, 16600,32700])

plt.axis('normal')
plt.show()

这样你就得到了:

result

撰写回答