我有一个图显示x4 vs y:
 

y是其他变量的对数,例如q(即y = log(q))
q的值是外行在阅读此图时将理解的内容。

我想在图形的右侧设置一个辅助轴,其中这些线与左侧轴位于相同的垂直位置,但是标签被等效的q值-即exp(y)-替换为小数点后2位。

有没有一种有效的方法可以创建从主轴y轴映射的辅助轴?

我正在使用pyplot中的matplotlib。一些示例起始代码:

import numpy as np
import matplotlib.pyplot as plt

q = np.random.rand(100,)
y = np.log(q)
x4 = np.random.rand(100,)

plt.scatter(x4, y)


我想添加第二个轴,该第二个轴具有与主轴相同的垂直位置和间距,但标签由exp(y)代替。还包括轴标签“ q”。

谢谢

最佳答案

我在这里的建议是使用双轴并与原始轴共享以固定刻度位置。然后,您可以使用FuncFormatter为刻度线添加正确的标签。这样做的好处是您无需事先确定图的限制,并且可以在图内自由缩放和平移。

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


f = lambda q: np.log(q)
finv = lambda x: np.exp(x)

x = np.random.rand(100,)
y = f(np.random.rand(100,))


fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.get_shared_y_axes().join(ax,ax2)

ax.scatter(x, y)

ax2.yaxis.set_major_formatter(FuncFormatter(lambda x,pos: f"{finv(x):.2f}"))
plt.show()


python - Matplotlib:次轴,其值从主轴映射-LMLPHP

10-08 09:45