强制python轴显示特定的数字

强制python轴显示特定的数字,python,image,matplotlib,Python,Image,Matplotlib,我有一个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数字 我该怎么做 编辑:为了进一步阐明我的意思,请看下图。我想要的是轴上用红色写的数

我有一个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数字

我该怎么做

编辑:为了进一步阐明我的意思,请看下图。我想要的是轴上用红色写的数字。我想让他们把已经存在的东西换成黑色。我如何做到这一点


谢谢

您可以通过以下方式专门设置勾选位置:

ax.set_xticks([0, 200])
ax.set_yticks([0, 100])

ax.set_xticklabels(['-30', '+100'])
ax.set_yticklabels(['+20', '-20'])

或者,您可以使用
imshow
将原点更改为lower,而不必翻转yticklabels。

您可以使用以下选项专门设置勾号位置:

ax.set_xticks([0, 200])
ax.set_yticks([0, 100])

ax.set_xticklabels(['-30', '+100'])
ax.set_yticklabels(['+20', '-20'])

可选地,你可以用<代码> iSime/COD>改变原点到下层,并且你不必翻转YTICK标签。

< P>你可以考虑使用图像<代码> Reals来设置图像的实际比例。 也就是说,要让您的图像在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)


你可能还想看看这个问题:如何把这些记号放在像素中心上,这取决于数据的实际意义。

< P>你可以考虑使用图像<代码> Reals来设置图像的实际比例。 也就是说,要让您的图像在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)



您可能还想看看这个问题:如何将刻度置于像素中心,这取决于数据的实际意义。

您的意思是要手动更改刻度?@GWW好的,这毕竟不是我想要的。您能提供一个示例图像吗?@GWW我用实际图像编辑了这个问题。现在有意义了吗?我想设置我自己的“限制”,以红色显示,并指定它们的频率。例如,-30,-20,-10,…你的意思是你想手动更改刻度?@GWW好的,这毕竟不是我想要的。你能提供一个示例图像吗?@GWW我用实际图像编辑了这个问题。现在有意义了吗?我想设置我自己的“限制”,以红色显示,并指定它们的频率。例如,-30,-20,-10,…嗯,好吧,但当我这样做的时候,他们似乎都被挤到了一边。这有意义吗?假设我有一个图像,跨越100x200。我真的只想说,xaxis显示它从-54到453,例如,在我指定的某个间隔。这有意义吗?“['-30',“+100']”是字符串列表。那么,如何将数字列表转换成字符串列表?我想使用np.arange(…).tolist()命令,但似乎需要将该列表生成一个字符串列表。我该怎么做?谢谢,我相信你能给出
set\xticklabel
整数。我使用了字符串,因此
+
保留在轴上。如果不能,您可以始终使用
map(str,NP.arange(…).tolist())
。如果需要专门设置整数的格式,可以使用map做其他有趣的事情。例如,
map({0:+d}).format,NP.arange(..)
将在
+
-
之前添加值。此解决方案仍然不起作用。它只是在前两个数字处“最大化”。例如,说
ax.set_xticklabels(['-10',10',30'])
只显示-10和10,没有显示30。嗯,好吧,但当我这样做时,它们似乎都被挤到了一边。这有意义吗?假设我有一个图像,跨越100x200。我真的只想说,xaxis显示它从-54到453,例如,在我指定的某个间隔。这有意义吗?“['-30',“+100']”是字符串列表。那么,如何将数字列表转换成字符串列表?我想使用np.arange(…).tolist()命令,但似乎需要将该列表生成一个字符串列表。我该怎么做?谢谢,我相信你能给出
set\xticklabel
整数。我使用了字符串,因此
+
保留在轴上。如果不能,您可以始终使用
map(str,NP.arange(…).tolist())
。如果需要专门设置整数的格式,可以使用map做其他有趣的事情。例如,
map({0:+d}).format,NP.arange(..)
将在
+
-
之前添加值。此解决方案仍然不起作用。它只是在前两个数字处“最大化”。例如,说
ax.set_xticklabels(['-10',10',30'])
只显示-10和10,不显示30。