使用imshow时自定义滴答自动缩放?

Mag*_*nus 7 python matplotlib

我试图imshow使用以下代码更改x轴上的刻度值:

import matplotlib.pyplot as plt
import numpy as np

def scale_xaxis(number):
    return(number+1001)

data = np.array([range(10),range(10,20)])
fig = plt.figure(figsize=(3,5))
ax = fig.add_subplot(111)
ax.imshow(data,aspect='auto')
ax.autoscale(False)
xticks = ax.get_xticks()
ax.xaxis.set_ticklabels(scale_xaxis(xticks))
plt.savefig("test.png")
Run Code Online (Sandbox Code Playgroud)

得到的图像http://ubuntuone.com/2Y5ujtlEkEnrlTcVUxvWLU

然而,x-ticks重叠并具有"非圆形"值.matplotlib有什么方法可以自动执行此操作吗?通过使用set_ticklabels或其他方式?

tac*_*ell 7

另外看看使用extent (doc)让我们matplotlib考虑如何放入tick标签并添加任意一个班次:

data = np.array([range(10),range(10,20)])
fig = plt.figure(figsize=(3,5))
ax = fig.add_subplot(111)
ax.imshow(data,aspect='auto',extent=[10000,10010,0,1])  
Run Code Online (Sandbox Code Playgroud)

如果你一定要做到这我的手,你可能会更好设置formatterlocatoraxis 得到你想要的东西(文件).

import matplotlib.pyplot as plt
import numpy as np

def scale_xaxis(number):
    return(number+1001)

def my_form(x,pos):
    return '%d'%scale_xaxis(x)

data = np.array([range(10),range(10,20)])
fig = plt.figure(figsize=(3,5))
ax = fig.add_subplot(111)
ax.imshow(data,aspect='auto')
ax.autoscale(False)
ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(int(2)))
ax.xaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(my_form))
Run Code Online (Sandbox Code Playgroud)

需要设置定位器以确保不会将滴答放在非整数位置,然后由格式化程序强制转换为整数(这会将它们留在错误的位置)

相关问题:

matplotlib:格式化轴偏移值到整数或特定数字

从matplotlib刻度标签格式中删除前导0