我使用matplotlib将绘图保存为我的LaTeX文档的svg文件。我正在禁用"text.parse_math"
设置,让文本排版,而构建我的文档(见注解)。
下面是我的Python代码的一个例子(matplotlib 3.6.2):
import matplotlib.pyplot as plt
plt.rcParams["svg.fonttype"] = "none"
plt.rcParams["text.parse_math"] = False
plt.rcParams["axes.unicode_minus"] = False
plt.bar([1, 2, 3], [1, 2, 3], label=r"$\tilde{H}\left(t_\infty\right)$")
plt.legend()
plt.show()
字符串
matplotlib显示了这样的图
的数据
而LaTeX则是这样显示的
的
图例中的标签按预期由LaTeX转换为数学模式。但是,由于图例框的大小是由原始标签文本决定的,所以它的宽度比我希望它在LaTeX模式下的宽度要大得多。
我搜索了解决方案,但文档和其他stackoverflow问题都是关于修改图例艺术家或控制填充的。如何直接减小图例框的大小?具体来说,我想知道这些是否可行,哪一种是最好的:
1.使用类似“代理标签”的东西,即,将盒子大小调整为“H(t_oo)”,但真实的的标签具有更长的LaTeX语法。
1.从plt.legend()
直接调整图例大小
1.直接创建大小合适的Legend()
示例
1.子类Legend
类来定义我自己的图例。
(edit:增强代码并指定matplotlib版本)
2条答案
按热度按时间btqmn9zl1#
如果你的目标是创建一个使用LaTeX字体(计算机现代)的图形,并且可以在PDF中搜索,那么你可以直接在Matplotlib中创建。
字符串
以下是PNG格式的结果:
的数据
u5rb5r592#
您可以通过将新值设置为
plt.legend()._legend_box.width
来调整图例框宽度:字符串
输出:
的数据
选项二:删除图例框线
另一个不需要手动覆盖图例框宽度的解决方案是完全删除它。您可以像这样删除图例框行:
型
输出:
的