Python 在matplotlib图形上设置自定义记号间距

Python 在matplotlib图形上设置自定义记号间距,python,matplotlib,graph,Python,Matplotlib,Graph,我想将刻度之间的间距设置为自定义距离,而不是自动生成。我想实现这个图形在y轴上的功能 我找到了如何设置自定义记号的方法,但是轴上的间距仍然相同,而且大多数记号仍然彼此接近。因此,我希望记号间隔与y轴上记号之间的间距不同,如我上面链接的图形。可以为轴使用单独的FuncFormatter: from matplotlib.ticker import FuncFormatter from matplotlib.pyplot import show import matplotlib.pyplot as

我想将刻度之间的间距设置为自定义距离,而不是自动生成。我想实现这个图形在y轴上的功能


我找到了如何设置自定义记号的方法,但是轴上的间距仍然相同,而且大多数记号仍然彼此接近。因此,我希望记号间隔与y轴上记号之间的间距不同,如我上面链接的图形。

可以为轴使用单独的FuncFormatter:

from matplotlib.ticker import FuncFormatter
from matplotlib.pyplot import show
import matplotlib.pyplot as plt
import numpy as np

a=np.random.random((100,100))

# create scaled formatters / for Y with Atom prefix
formatterY = FuncFormatter(lambda y, pos: '{0:g}'.format(y))
formatterX = FuncFormatter(lambda x, pos: '{0:g}'.format(x))

# apply formatters 
fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(formatterY)
ax.xaxis.set_major_formatter(formatterX)

plt.imshow(a) 

# create labels
plt.xlabel('x label')
plt.ylabel('y label')
plt.xticks(list(range(0, 100,5))) 

plt.yticks(list(range(100, 0,-20)))

plt.show()


使它们的风格独立。请参阅-可能会给您一个起点。

我认为您发布的图像是。y轴上的每个记号值都是较低的记号值乘以2。在普通图中,它们的距离不相同,但在对数图中,它们的距离相同

由于您没有数据,我将展示一个玩具示例,演示如何在y轴上使用对数图:

import matplotlib.pyplot as plt
import matplotlib
import numpy as np

x = np.linspace(20, 51, 7)

y1 = np.exp(x**0.2)
y2 = np.exp(x**0.4)
y3 = np.exp(x**0.6)
y4 = np.exp(x**0.8)

fig, ax = plt.subplots(ncols=1, nrows=1)

ax.plot(x, y1, x, y2, x, y3, x, y4)
ax.set_yscale('log')
ax.minorticks_off()
ax.set_xticks(range(18, 54, 5))
ax.grid(linestyle='--')

ax.grid(linestyle='--')

plt.show()

生成的图如下图所示,

谢谢,但这不是我真正想要的,我想知道如何设置刻度间距,例如从10-20是1cm,然后从20-50也是1cm,从50-100也是1cm,这可能吗?以描述中的图形为例。@bernosbernus您描述的通常被认为是“对数”缩放:每1厘米[0,1,1010010001000000]等进行一次刻度,当您还想看到较小值的“排列”时,它用于具有非常大值的数据集。误读您的意图-jdho的答案向您展示了如何进行日志缩放,或者,如果要查找标题中所问问题的答案,请查看。