在matplotlib标签和标题中写希腊字母

-1 投票
1 回答
1716 浏览
提问于 2025-04-18 14:35

我想在我的图表中写一些希腊文的文字,比如标签和图标题,但到现在为止都没成功。

我并不是想打印特定的字母(我知道怎么用特殊字符来做到这一点),我更希望能把整段文字用希腊文写出来(可能是用Unicode和u'text'?)。

在我接受建议之前,我想先说明一下,出于某种原因,我无法让matplotlib和TeX配合使用(我是在Ubuntu 14.10的Anaconda下用Ipython notebook),所以这条路行不通。

我尝试加载Arial字体,确实加载成功了,但我看到的还是方块,而不是字母。我使用了

import matplotlib.font_manager as fm
prop = fm.FontProperties(fname='/usr/share/fonts/truetype/msttcorefonts/Arial.ttf') 

然后为了显示字符串,我用了u'Αποτελέσματα προσομοίωσης'。Arial字体应该能完美显示希腊文,我在文本编辑器中用过很多次。

1 个回答

1

我通过以下方法解决了这个问题:

首先,你需要导入必要的库,并设置一个电脑上已安装的字体,这个字体一定能显示希腊字母,比如Ubuntu字体(下面代码中的Ubuntu Bold)。

import matplotlib.font_manager as fm
fp1 = fm.FontProperties(fname='/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-B.ttf')

然后,你可以将选定的字体具体应用到每个标签、标题等,方法如下:

plt.title(u"Τίτλος του γραφήματος",fontproperties=fp1)

如果这样做还是不行,试着在文件开头添加以下这一行:

# -*- coding: utf-8 -*-

这里提供了一个示例图,以证明代码的正确性:

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np

fp1 = fm.FontProperties(fname='/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-B.ttf')

data = np.random.randn(5000) #generate some random data
plt.plot(data)
plt.title(u"Τίτλος του γραφήματος", fontproperties=fp1)
plt.xlabel(u"Άξονας x", fontproperties=fp1)
plt.ylabel(u"Άξονας y", fontproperties=fp1)
plt.show()

你应该能看到类似这样的结果:

示例图

撰写回答