首页 > 解决方案 > 通过在 matplotlib 中用 X 替换数字来隐藏数字的第一个值

问题描述

我有给我以下图像的代码:

import matplotlib.pyplot as plt
plt.figure(figsize=(7,3))
plt.plot([-2,-1,0,1,2],[5004,5006,5002,5007,5001])
plt.show()

在此处输入图像描述

我想用 X 替换 y 轴上第一个数字的值(5001> X001、5002> X002 等)。

在此处输入图像描述

是否可以在 matplotlib 中自动执行此操作?

标签: pythonmatplotlibhidesubstitutionyaxis

解决方案


您可以使用模块中FuncFormatter的a 。matplotlib.ticker

从文档:

该函数应接受两个输入(一个刻度值 x 和一个位置 pos),并返回一个包含相应刻度标签的字符串。

所以它只是一个操作刻度值的情况,x,并将第一个字符更改为“X”。

例如:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

fig = plt.figure(figsize=(7, 3))
ax = fig.add_subplot()

ax.plot([-2, -1, 0, 1, 2], [5004, 5006, 5002, 5007, 5001])

ax.yaxis.set_major_formatter(ticker.FuncFormatter(
        lambda x, pos: '{}{}'.format('X', str(int(x))[1:])))

plt.show()

在此处输入图像描述

注意:为方便起见,可以直接将函数作为其输入,无论如何set_major_formatter都会转换为 a 。FuncFormatter因此,您可以避免导入ticker模块的需要。您可以将上面的示例简化为:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(7,3))
ax = fig.add_subplot()

ax.plot([-2,-1,0,1,2],[5004,5006,5002,5007,5001])

ax.yaxis.set_major_formatter(lambda x, pos: '{}{}'.format('X', str(int(x))[1:]))
plt.show()

推荐阅读