我有一系列20个图(不是子图)可以在一个图中制作.我希望传说能够在盒子之外.同时,我不想改变轴,因为图形的大小减少了.请帮助我以下查询:
我熟悉以下问题:
看起来这些问题的答案很有可能摆脱轴的精确收缩,以便传说适合.
然而,收缩轴并不是一个理想的解决方案,因为它使数据变得更小,使得它实际上更难以解释; 特别是当它的复杂和有很多事情发生时...因此需要一个大的传奇
文档中复杂图例的示例演示了对此的需求,因为其图中的图例实际上完全遮盖了多个数据点.
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')
Run Code Online (Sandbox Code Playgroud)
请注意最终标签"逆棕褐色"实际上是如何在图框之外(看起来严重截止 - 而不是出版质量!)

最后,我被告知这是R和LaTeX中的正常行为,所以我有点困惑为什么在python中这么难...有历史原因吗?Matlab在这件事上同样很差吗?
我在pastebin http://pastebin.com/grVjc007上有这个代码的(仅略微)更长版本
是否有人知道是否可以在图中旋转图例matplotlib?我使用下面的代码制作了一个简单的图,并在绘画中编辑了图表以显示我想要的内容.
plt.plot([4,5,6], label = 'test')
ax = plt.gca()
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
假设我想绘制一个非常简单的图形,水平布置2个子图,我想在第二个子图的右侧添加一些文本.我在Jupyter Notebook工作,但这不应该改变任何东西:
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(8, 3))
ax1 = plt.subplot(121)
ax1.plot(x,y1)
ax2 = plt.subplot(122)
ax2.plot(x,y2)
ax2.text(1.05,0.7, 'Some text here', horizontalalignment='left', transform=ax2.transAxes)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试导出图形时,右边的文本会被删除:
plt.savefig(r'C:\mypy\test_graph.png', ext='png');
Run Code Online (Sandbox Code Playgroud)
使用plt.tightlayout(),如建议在这里使问题变得更糟.
我该如何最好地解决这个问题?
我正在使用matplotlib.pyplot图例绘制条形图,plt.savefig()与plt.show(). 更准确地说,图例不在情节中,jpg文件只有图例的左侧一半。
我的代码:
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(12,6))
plt.bar(x, y, label="a")
plt.legend(bbox_to_anchor=(1.02, 1), loc="upper left")
plt.show()
fig.savefig("a.jpeg")
Run Code Online (Sandbox Code Playgroud)
我查看了这个答案Matplotlib savefig 与图外的图例,但选择的答案建议手动调整轴。我有很多不同的数字,所以可能不合适。多年前就贴出来了,不知道有没有什么自动的方法可以实现plt.savefig()as的效果plt.show()?我在plt.savefig().
谢谢!