在matplotlib中从一组数据绘制第二个缩放的y轴

时间:2015-07-08 09:33:17

标签: python matplotlib plot

我有两个相同数据的视图,这需要有另一个y轴,它从第一个自然y轴适当缩放。因此,当我绘制我的{x,y}数据时,左侧y轴显示y,但右侧y轴也显示1 / y或任何其他功能。我不想绘制{x, f(x)}{x, 1/y}

现在使问题更复杂的是我使用.plt交互方式而不是轴方法。

plt.scatter(X, Y, c=colours[count], alpha=1.0, label=chart, lw = 0)
plt.ylabel(y_lbl)
plt.xlabel(x_lbl)

还有另一种方式 - 用plt?或者是生成两个覆盖图并适当更改alpha的情况?

1 个答案:

答案 0 :(得分:2)

我必须检查您之前(重复)的问题和所有评论,以了解您真正想要的内容。因此,要获得辅助y轴,您仍然可以使用twinx。然后,您可以使用set_ylim确保它具有与第一个相同的限制。要根据某些功能(在您的情况下为1/y)设置刻度标签,您可以使用自定义FuncFormatter

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mticker

fig, ax1 = plt.subplots(1,1)
ax1.set_xlabel('x')
ax1.set_ylabel('y')

# plot something
x = np.linspace(0.01, 10*np.pi, 1000)
y = np.sin(x)/x
ax1.plot(x, y)

# add a twin axes and set its limits so it matches the first
ax2 = ax1.twinx()
ax2.set_ylabel('1/y')
ax2.set_ylim(ax1.get_ylim())

# apply a function formatter
formatter = mticker.FuncFormatter(lambda x, pos: '{:.3f}'.format(1./x))
ax2.yaxis.set_major_formatter(formatter)

plt.show()

结果: enter image description here