下面是mycode 如果使用图设置受约束布局(True),图例:lga显示错误 如果使用fig.tight_layout(),图例:lga显示正常 您能告诉我原因以及如何使用set_constrained_布局吗
import numpy as np
import matplotlib.pyplot as plt
x1 = np.arange(10)
x2 = x1*10
y1 = x1*2
y2 = x1*100
fig = plt.figure()
fig.set_constrained_layout(True)
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,1,frameon=False,sharex=ax1)
ax3 = fig.add_subplot(2,2,2)
ax4 = fig.add_subplot(2,2,2,frameon=False,sharex=ax3)
lg1 = ax1.plot(x1,y1,label='ax1')
lg2 = ax2.plot(x2,y2,label='ax2',color='tab:red')
ax2.get_yaxis().set_ticks_position('right')
lg3 = ax3.plot(x1,y1,label='ax3')
lg4 = ax4.plot(x2,y2,label='ax4',color='tab:red')
ax4.get_yaxis().set_ticks_position('right')
ax1.tick_params(axis='x', labelcolor='tab:blue')
ax1.tick_params(axis='y', labelcolor='tab:red')
ax2.tick_params(axis='y', labelcolor='tab:red')
ax3.tick_params(axis='x', labelcolor='tab:blue')
ax3.tick_params(axis='y', labelcolor='tab:red')
ax4.tick_params(axis='y', labelcolor='tab:red')
loc_val = "upper right"
lga = lg1 + lg2
labs = [l.get_label() for l in lga]
ax1.legend(lga, labs, loc=loc_val ,bbox_to_anchor=(2,1))
lgb = lg3 + lg4
labs = [l.get_label() for l in lgb]
ax3.legend(lgb, labs, loc=loc_val )
fig.set_constrained_layout(True)
#fig.tight_layout()
plt.show()
您需要使用GridSpec(或
plt.subplots
来组织布局,其作用相同)。matplotlib的未来版本将满足您的需求,但它目前的限制是,每个add_subplot
命令都会添加一个新的gridspec,而且它们彼此都不了解,因此布局很糟糕在您的示例中,您可能希望弄乱图例的位置。不太确定您使用bbox_to-anchor值的目的是什么
相关问题 更多 >
编程相关推荐