我想在每个子图中添加第二个辅助轴,类似于此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)
是否有可能有一个子图,每个图有两个副轴?
答案 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)