我有一个python图,使用以下代码:
fig = plt.figure()
ax = plt.add_subplot(111)
ax.imshow(an_image)
我想要做的只是强制x和y轴,以跨越某个最小和最大数量。 (不能使用ax.set_xlim()
或ax.set_ylim()
执行此操作,因为实际会更改轴限制)。我只想要一些特定的x_min,x_max,y_min和y_max数字显示在我的图像上。
我该怎么做?
编辑:为了进一步澄清我的意思,请看下面的图片。我想要的是用红色写的轴上的数字。我希望他们用黑色代替已有的东西。我该如何做到这一点?
由于
答案 0 :(得分:1)
您可以使用以下方式专门设置刻度线位置:
ax.set_xticks([0, 200])
ax.set_yticks([0, 100])
ax.set_xticklabels(['-30', '+100'])
ax.set_yticklabels(['+20', '-20'])
或者,您可以使用imshow
将原点更改为更低,并且您不必翻转yticklabels。
答案 1 :(得分:1)
您可以考虑使用图像extent
来设置图像的实际比例。
即让你的图片从x -30
缩放到100
,-20
到20
你可以使用
ax.imshow(data, origin="lower", extent=[-30, 100, -20,20])
一个例子:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.normal(size=(10,20))
xmin, xmax = -30, 100
ymin, ymax = -20, 20
fig, ax = plt.subplots()
extent= [xmin, xmax, ymin, ymax]
ax.imshow(data, origin="lower", extent=extent)
ax.set_xticks(np.arange(xmin,xmax+1,10))
ax.set_yticks([-20,0,20])
plt.show()
请注意,这可能会将图像像素缩放为非方形。要保留方形像素,可以使用aspect
参数。
extent= [xmin, xmax, ymin, ymax]
aspect=data.shape[0]/float(ymax-ymin)/(data.shape[1]/float(xmax-xmin))
ax.imshow(data, origin="lower", extent=extent, aspect=aspect)
你可能还想看看这个问题:Matplotlib: how to make imshow read x,y coordinates from other numpy arrays?关于如何将刻度线放到像素中心,这取决于数据的实际含义。