假设我有两个 numpy 数组x和y,我想绘制一个简单的曲线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 轴以避免这种情况。
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |