我正在尝试使用以下代码更改 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")
Resulting image http://ubuntuone.com/2Y5ujtlEkEnrlTcVUxvWLU
然而,x-ticks 重叠并具有“非圆形”值。 matplotlib 有什么方法可以自动执行此操作吗?使用 set_ticklabels
还是其他方式?
最佳答案
同时研究使用 extent
(doc)让 matplotlib
考虑如何放入刻度标签并添加任意偏移:
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])
如果你真的想做我的手,你最好设置 axis
的 formatter
和 locator
来得到什么你想要(doc) .
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))
需要设置定位器以确保刻度不会被放置在非整数位置,然后由格式化程序强制转换为整数(这会将它们留在错误的位置)
相关问题:
matplotlib: format axis offset-values to whole numbers or specific number
关于python - 使用 imshow 时自定义刻度自动缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409006/