将 x 的函数作为 x 刻度标签

Bac*_*ach 1 python matplotlib

假设我有两个 numpy 数组xy,我想绘制一个简单的曲线y作为 的函数x。在y轴上,我想(作为标签)放置 的值y,但在x轴上,我想将值的某些函数作为标签放置在那里。

例如,如果x=array([1, 2, 4, 8, 16])y=array([1, 2, 1, 2, 1]),我想为 xticks 分配标签,这将是以下字符串格式的结果:

lambda x_val: "$2^{{+{:.0f}}}$".format(log2(x_val))
Run Code Online (Sandbox Code Playgroud)

但我对通用解决方案感兴趣。

小智 5

使用matplotlib.ticker.FuncFormatter. 无耻地复制和改编自定义股票代码示例,这样的事情可以工作:

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

rc('text', usetex=True)

formatter = FuncFormatter(lambda x_val, tick_pos: "$2^{{+{:.0f}}}$".format(np.log2(x_val)))

x = np.array([1, 2, 4, 8, 16])
y = np.array([1, 2, 1, 2, 1])
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(formatter)
plt.plot(x, y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这导致

在此处输入图片说明

注意第一个标签是坏的;运行代码时会发出除以零警告。那是因为 matplotlib 在 0 到 16 之间缩放轴,并在 0 处放置一个刻度线(然后传递给格式化程序)。您可以关闭该刻度线,或以不同的方式缩放 x 轴以避免这种情况。