【发布时间】:2013-06-17 23:27:52
【问题描述】:
辅助轴图的图例对另一个轴的图是透明的。重现问题的最小示例:
import matplotlib.pyplot as plt
ax1 = plt.subplot(111)
ax2 = ax1.twinx()
ax2.plot([1, 2, 3], [0.3, 0.2, 0.1], 'r')
ax1.plot([1, 2, 3], [1, 2, 3], 'b', label='ax1')
ax1.legend(loc=2)
plt.show()
我得到的输出是:
如您所见,蓝色情节的图例被红色情节透支。重新排列绘图命令、更改 alpha 值或更改对象的 z 顺序都没有帮助。
有什么方法可以使图例对所有情节不透明?
编辑:@tcaswell:虽然您的答案适用于单个图例,但如果两个轴都有单独的图例,则它不起作用。在下面的代码中,我为ax2 添加了一个标签:
import matplotlib.pyplot as plt
plt.figure()
ax1 = plt.subplot(111)
ax2 = ax1.twinx()
ax2.plot([1, 2, 3], [0.3, 0.2, 0.1], 'r', label='ax2')
ax1.plot([1, 2, 3], [1, 2, 3], 'b', label='ax1')
ax1.legend(loc=2)
ax2.legend(loc=1)
ax1.set_zorder(1) # make it on top
ax1.set_frame_on(False) # make it transparent
ax2.set_frame_on(True) # make sure there is any background
plt.show()
结果如下:
虽然您更通用的方法可以解决此问题,但不幸的是,使用 Figure.legend 会将图例置于情节之外。用loc 明确地放置它们有点乏味,并且在缩放绘图时效果不佳。有没有更好的解决方案?
【问题讨论】:
标签: python matplotlib