python - 使用 imshow 时自定义刻度自动缩放?

标签 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")

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

如果你真的想做我的手,你最好设置 axisformatterlocator 来得到什么你想要(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

removing leading 0 from matplotlib tick label formatting

关于python - 使用 imshow 时自定义刻度自动缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409006/

相关文章:

python-3.x - 如何使用 for 循环并排绘制图表

python - 如何从表中检索行并使用 urllib 获取/打开每个链接?

python pandas 过滤 true、false 和两者的列

Python包安装错误-找不到py_compiler msvc

python-2.7 - 在图例中使用不同的颜色和形状 [Seaborn,Python]

python - 编辑曲线和轴参数选项未在 matplotlib 中显示

python:从 couchdb 端点获取 npm 包数据

python - 检查文件中是否存在值

python - Python 3.x 中的绘图

python - 绘制日期时间数据帧会导致错误 View 限制最小值 -36495.50013946759 小于 1