Python:Suplots有两个辅助轴

时间:2015-10-31 23:32:39

标签: python matplotlib

这是question的后续行动。我感谢maxnoe的帮助。

我想在每个子图中添加第二个辅助轴,类似于此example,但是在子图中。

我尝试使用以下方式设置我的身材:

fig, ((ax1a, ax2a), (ax3a, ax4a)) = host_subplot(4,4, axes_class=AA.Axes)

但我得到TypeError: 'AxesHostAxesSubplot' object is not iterable

ValueError: Illegal argument(s) to subplot: (4, 4)

是否有可能有一个子图,每个图有两个副轴?

1 个答案:

答案 0 :(得分:2)

plt.subplots是一个便利函数,用于一次创建图形和多个子图。但是,它的权力是有限的。如果你想创建特殊的轴,你必须将它们初始化为“硬”。方式。

使用显示的属性调整您为2x2子图的网格提到的示例。为了避免使用多个重复代码,我使用for循环初始化所有绘图并将它们存储在字典列表中。

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

subplots = []
rows = 2
columns = 2

for n in range(rows * columns):
    host = host_subplot(rows, columns, n + 1, axes_class=AA.Axes)

    par1 = host.twinx()
    par2 = host.twinx()

    offset = 60

    par2.axis["right"] = par2.get_grid_helper().new_fixed_axis(
        loc="right",
        axes=par2,
        offset=(offset, 0),
    )

    par2.axis["right"].toggle(all=True)

    host.set_xlabel("Distance")
    host.set_ylabel("Density")
    par1.set_ylabel("Temperature")
    par2.set_ylabel("Velocity")

    subplots.append({
        'density': host,
        'temperature': par1,
        'velocity': par2,
    })


subplots[0]['density'].plot([1, 2, 3])
subplots[2]['temperature'].plot([1, 2, 3])
plt.tight_layout()
plt.savefig('result2.png', dpi=300)

结果: result