将matplotlib图例移到轴外,使其被图形框切断

缩小轴并不是一个理想的解决方案,因为它会使数据变小,从而实际上很难解释。特别是当它复杂并且有很多事情要发生时...因此需要一个大的传说


文档中复杂图例的示例说明了这一点,因为其图中的图例实际上完全遮盖了多个数据点。


http://matplotlib.sourceforge.net/users/legend_guide.html#legend-of-complex-plots


我想做的是动态扩展图形框的大小以适应不断扩展的图形图例。


import matplotlib.pyplot as plt

import numpy as np


x = np.arange(-2*np.pi, 2*np.pi, 0.1)

fig = plt.figure(1)

ax = fig.add_subplot(111)

ax.plot(x, np.sin(x), label='Sine')

ax.plot(x, np.cos(x), label='Cosine')

ax.plot(x, np.arctan(x), label='Inverse tan')

lgd = ax.legend(loc=9, bbox_to_anchor=(0.5,0))

ax.grid('on')

请注意,最终标签“ Inverse tan”实际上是如何位于图形框之外的(看起来很不完整-而不是出版物质量!)

http://img2.mukewang.com/5dc0eb050001493e08000597.jpg

最后,有人告诉我这是R和LaTeX中的正常行为,所以我有些困惑,为什么在python中如此困难……是否有历史原因?Matlab在这件事上是否同样贫穷?


我在pastebin http://pastebin.com/grVjc007上有(仅略长)此代码的较长版本


繁星coding
浏览 1166回答 3
3回答

12345678_0001

补充:我发现应该立即解决问题的方法,但是下面的代码其余部分也提供了替代方法。使用此subplots_adjust()函数可将子图的底部向上移动:fig.subplots_adjust(bottom=0.2) # <-- Change the 0.02 to work for your plot.然后bbox_to_anchor在图例命令的图例部分中使用偏移量,以将图例框放置在所需的位置。设置figsize和使用的某种组合subplots_adjust(bottom=...)应该可以为您产生质量图。备选: 我只是更改了这一行:fig = plt.figure(1)至:fig = plt.figure(num=1, figsize=(13, 13), dpi=80, facecolor='w', edgecolor='k')并改变了lgd = ax.legend(loc=9, bbox_to_anchor=(0.5,0))至lgd = ax.legend(loc=9, bbox_to_anchor=(0.5,-0.02))并在我的屏幕(24英寸CRT显示器)上正常显示。此处figsize=(M,N)将图形窗口设置为M英寸乘N英寸。只是玩这个,直到它看起来适合您。将其转换为更具可伸缩性的图像格式,并在必要时使用GIMP进行编辑,或者viewport在包括图形时仅使用LaTeX 选项进行裁剪。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python