通过在 matplotlib 中用 X 替换它来隐藏数字的第一个值

Hiding the first value of a number by replacing it with an X in matplotlib

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

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 中自动执行此操作?

您可以使用 FuncFormatter from the matplotlib.ticker 模块。

来自文档:

The function should take in two inputs (a tick value x and a position pos), and return a string containing the corresponding tick label.

所以这只是一个操纵刻度值 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 可以直接将函数作为其输入,无论如何都会将其转换为 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()

我遵循了 this guide from matplotlib and applied it to your example. I found a neat class called FuncFormatter 我们可以使用而不是指南中的那个。 class 想要一个以 xpos 作为参数的可调用对象,只要我们 return 一个字符串,我们就可以做任何我们想做的事情。

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

fig, ax = plt.subplots()
ax.plot([-2,-1,0,1,2],[5004,5006,5002,5007,5001])
ax.yaxis.set_major_formatter(FuncFormatter(lambda x, pos: f"X{str(int(x))[1:]}"))
plt.show()