如果我用matplotlib保存一个图形,有时某些字符,如endash,űndő,会比其他字符处于更低的位置。不仅仅是在传说中,还有在标签和标题上。我用matplotlib 1.0.1和1.1.1~rc1在ubuntu11.10和12.04上试用过。文件的源代码用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")
这是我得到的部分数据。(我用埃文斯和acroread查看)。在
我不擅长字体,但我设置了字体.sans-serif在matplotlibrc中与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
包,如果你还没有的话。在乳胶漆:
乳胶方法效果最好,但速度慢得多,当然还会引入很大的外部依赖性。我在您的文件顶部添加了以下三行:
看下面的结果看起来不错,但你可能想做一些关于轴刻度标签的事情。在
开罗
或者,您可以使用GTKCairo后端。 我在代码的顶部添加了两行:
^{pr2}$您可以在下面的图像中看到,它不是完美的图例文本正确对齐,但不幸的是,它现在偏离了图例框。我真的不知道为什么会发生这种情况,但是一个可能的解决方法是将
plt.legend()
改为plt.legend(borderpad=2)
,这将给出下面的最终图像。现在空格太多了,但至少文本适合。您可以尝试不同的图例选项,以获得更好的效果。在图像
请注意,它们在这里看起来比原始的pdf文件要糟糕得多。我刚刚把pdf文件直接上传到imgur,它似乎能把它们转换成相当低分辨率的图像。在
最初:
含乳胶:
latex pdf的特写截图:
使用GTKCairo后端:
使用GTKCairo和borderpad=2
相关问题 更多 >
编程相关推荐