强制python轴显示特定数字

时间:2017-06-05 23:54:42

标签: 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数字显示在我的图像上。

我该怎么做?

编辑:为了进一步澄清我的意思,请看下面的图片。我想要的是用红色写的轴上的数字。我希望他们用黑色代替已有的东西。我该如何做到这一点?

enter image description here

由于

2 个答案:

答案 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-2020你可以使用

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()

enter image description here

请注意,这可能会将图像像素缩放为非方形。要保留方形像素,可以使用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)

enter image description here

你可能还想看看这个问题:Matplotlib: how to make imshow read x,y coordinates from other numpy arrays?关于如何将刻度线放到像素中心,这取决于数据的实际含义。