如何使用Matplotlib重新调整轴的限制(添加到主图中)?使用交互式缩放工具?

时间:2017-09-07 05:05:19

标签: python matplotlib

我使用以下脚本显示两个y轴和一个公共x轴的信息。

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA

#creating a host plot with x and y axis
hostplot = host_subplot(111, axes_class=AA.Axes)

#creating a second y axis
extra_y_axis = hostplot.twinx()
extra_y_axis.set_navigate_mode(True)
extra_y_axis.set_navigate(True)
print extra_y_axis.can_zoom() #prints true on output

hostplot.set_xlabel("host_x")
hostplot.set_ylabel("host_y")
extra_y_axis.set_ylabel("extra_y")

hostplot.plot([0, 1, 2], [0, 1, 2])
extra_y_axis.plot([0, 1, 2], [0, 3, 2])

plt.draw()
plt.show()

在此之后,我使用了'缩放到矩形'左下方托盘中的工具如下图所示:

as shown

我得到了以下输出:

following output

请注意两幅图像中的y轴比例。虽然缩放功能对主机绘图工作正常,但我无法将extra_y_axis重新缩放,它只是保持一个恒定的刻度(所以我无法使用第二个轴真正放大绘图)。

如何才能使所有轴在缩小一小部分时重新缩放?

由于

1 个答案:

答案 0 :(得分:0)

我已经将你的问题追溯到了axes_grid1工具包的问题。如果您不需要使用此工具包,您可以通过以常规方式初始化您的数字来轻松解决您的问题:

import matplotlib.pyplot as plt
#creating a host plot with x and y axis
fig, hostplot = plt.subplots()

#creating a second y axis
extra_y_axis = hostplot.twinx()

hostplot.set_xlabel("host_x")
hostplot.set_ylabel("host_y")
extra_y_axis.set_ylabel("extra_y")

hostplot.plot([0, 1, 2], [0, 1, 2])
extra_y_axis.plot([0, 1, 2], [0, 3, 2])

plt.show()

如果您确实想使用工具包,那么您必须添加几行以使两个y轴一起缩放和转换:

import matplotlib.transforms as mtransforms
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.parasite_axes import SubplotHost

fig = plt.figure()
ax1 = SubplotHost(fig, 1, 1, 1)

#set the scale difference between the two y axes
aux_trans = mtransforms.Affine2D().scale(sx = 1.,sy= 1.5)
ax2 = ax1.twin(aux_trans)

fig.add_subplot(ax1)

ax1.plot([0, 1, 2], [0, 1, 2])
ax2.plot([0, 1, 2], [0, 3, 2])
ax1.set_ylim(0,3)

plt.show()