gpt4 book ai didi

python - 在 matplotlib 的保存的 pdf 图中,一些字符位于较低的位置

转载 作者:行者123 更新时间:2023-11-28 18:49:00 25 4
gpt4 key购买 nike

如果我用 matplotlib 保存图形,有时某些字符(如 endash、űénd ő)的位置低于其他字符。不仅在图例中,而且在标签和标题中。我在 Ubuntu 11.10 和 12.04 上用 matplotlib 1.0.1 和 1.1.1~rc1 试过了。文件源编码为utf-8,Python版本为2.7.2+。这是来源:

import matplotlib.pyplot as plt
from numpy import sin, linspace, pi
x = linspace(0, 20, 1000)
plt.plot(x, sin(x), label=u"Hurrá, őrtűz! Szűztűz.")
plt.plot(x, sin(x), label=u"xxxxá, őx–x–xűx! Sxűxxűx.")
plt.plot(x, sin(x+pi/2), label=u"B–A őrűr ()")
plt.plot(x, sin(x-pi/2), label=u"B–A őrűr")
plt.plot(x, sin(x+pi), label=u"xãxâxőxŐxűxŰx–x endash")
plt.plot(x, sin(x+.1), label=u"őrtűz !")
plt.plot(x, sin(x+.2), label=u"őr tűz! (")
plt.plot(x, sin(x+pi+.2), label=u"őrült tűzlány ãxâ")
plt.title(u"matplotlib version 1.0.1, source: utf-8, Ubuntu 11.10")
plt.legend()
plt.savefig("tmp_accent.pdf")
plt.savefig("tmp_accent.eps")

这是我得到的图的一部分。 (我用 evince 和 acroread 查看)。

The part of the PDF file I got (with evince, but with acroread is the same)

我不擅长字体,但是我在matplotlibrc中设置了font.sans-serif,字体Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde一一设置。

我可以使用 epspdf 命令行工具从 eps 版本制作一个更好的版本,但这种方法取决于平台。有没有更好的办法?问题是存在于较新的 matplotlib 版本还是较新的 Ubuntu 中?

最佳答案

似乎呈现 unicode 时存在各种问题,尤其是 pdf 文件。我看到您使用略有不同的 matplotlib 版本(见下文)时遇到的相同问题。如果我切换到不同的 matplotlib 后端,则不会发生这种情况,或者,如果您安装了 latex,则可以让 latex 进行文本渲染(参见 http://matplotlib.org/users/usetex.html)。在 Ubuntu 上,如果您还没有安装 texlive-latex-extra 包,我相信您需要安装它。

latex :

latex方法效果最好,但是速度慢很多,当然引入了很大的外部依赖。我在您的文件顶部添加了以下三行:

import matplotlib
matplotlib.rcParams['text.usetex']=True
matplotlib.rcParams['text.latex.unicode']=True

请看下面的结果——看起来不错,但您可能想对轴刻度标签做些事情。

开罗

或者,您可以使用 GTKCairo 后端。我在您的代码顶部添加了两行:

import matplotlib
matplotlib.use("GTKCairo")

您可以在下图中看到它并不完美——图例文本正确对齐,但不幸的是它现在偏离了图例框。我真的不知道为什么会这样,但一个可能的解决方法是将行 plt.legend() 更改为 plt.legend(borderpad=2),这给出了下面的最终图像。现在有太多空格,但至少文本适合。您也许可以尝试不同的图例选项来获得看起来更好的东西。

图片

请注意,它们在这里看起来比原始 pdf 文件中的要差得多。我刚刚将 pdf 文件直接上传到 imgur,它似乎将它们转换为相当低分辨率的图像。

最初:

TKAGG backend

使用 latex : Latex text rendering

latex pdf 的特写截图:

enter image description here

使用 GTKCairo 后端:

GTKCairo

使用 GTKCairo 和 borderpad=2

GTKCairo with borderpad

关于python - 在 matplotlib 的保存的 pdf 图中,一些字符位于较低的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com