【发布时间】:2014-06-07 22:00:17
【问题描述】:
我正在使用 Matplotlib 创建绘图,并将其保存为 SVG,使用 Inkscape 导出为 .pdf + .pdf_tex,并将 .pdf_tex 文件包含在 LaTeX 文档中。
这意味着我可以在标题、图例等中输入 LaTeX 命令,给出这样的图像
当我在我的 LaTeX 文档中使用它时呈现这样的效果。请注意,轴上数字的字体发生了变化,并且图例中的 LaTeX 代码已编译:
绘图代码(此处未显示如何导出为 SVG,但可根据要求显示):
import numpy as np
x = np.linspace(0,1,100)
y = x**2
import matplotlib.pyplot as plt
plt.plot(x, y, label = '{\\footnotesize \$y = x^2\$}')
plt.legend(loc = 'best')
plt.show()
如您所见,问题在于图例周围的框的对齐方式和大小是错误的。这是因为图片通过 Inkscape + pdflatex 时标签的文字大小发生了变化(因为\footnotesize 等消失了,字体大小发生了变化)。
我发现我可以选择标签的位置
plt.label(loc = 'upper right')
或者如果我想要更多的控制权,我可以使用
plt.label(bbox_to_anchor = [0.5, 0.2])
但我还没有找到任何使标签周围的框变小的方法。这可能吗?
使盒子变小的另一种方法是使用类似的东西删除盒子的轮廓
legend = plt.legend()
legend.get_frame().set_edgecolor('1.0')
然后将标签移动到我想要的位置。在这种情况下,我希望能够通过首先让 python/matplotlib 使用来设置标签的位置
plt.label(loc = 'upper right')
然后例如将其向右移动一点。这可能吗?我尝试过使用get_bbox_to_anchor() 和set_bbox_to_anchor(),但似乎无法正常工作。
【问题讨论】:
-
我在寻找
loc关键字 -upper left等并到达这里。
标签: python matplotlib legend