2014-01-30 183 views
23

我正在嘗試將matplotlib的默認字體更改爲Helvetica Neue。在我的Mac上使用EPD/Canopy前一段時間一切正常。更改matplotlib的默認字體

試圖在Ubuntu上做同樣的事情,它不工作。

這是我做過什麼:

  1. 安裝Helvetica Neue字體

    $ fc-match 'Helvetica Neue':Light 
    HelveticaNeue-Light.otf: "Helvetica Neue" "細體" 
    
  2. 轉換的ODT/DFONT到TTF:

    fondu -show HelveticaNeue.dfont 
    
  3. 改變matplotlibrc到

    $ cat ~/.config/matplotlib/matplotlibrc 
    ... 
    font.family: Helvetica Neue 
    

    我也試圖與:

    font.family: sans-serif 
    font.sans-serif: Helvetica Neue 
    
  4. 我刪除了字體緩存

    rm ~/.config/matplotlib/fontList.cache 
    

但所有的這些步驟都是爲我工作。

$ python -c 'from matplotlib import pyplot as plt; plt.plot(1); plt.savefig("/tmp/test.png")' 
    /usr/local/lib/python2.7/dist-packages/matplotlib-1.3.0-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:1236: 
    UserWarning: findfont: Font family ['Helvetica Neue'] not found. Falling back to Bitstream Vera Sans 

(prop.get_family(),self.defaultFamily [fontext]))

版是1.3.0

$ python -c 'import matplotlib; print matplotlib.__version__' 
    1.3.0 

我還試圖移動字體來~/.config/matplotlib/fonts/ttf但它沒」工作。


編輯: 作爲建議我嘗試選擇一個特定的字體特定文本。

import matplotlib as mpl 
mpl.use('Agg') 
import matplotlib.pyplot as plt 
import matplotlib.font_manager as font_manager 

path = '/home/<myusername>/.fonts/HelveticaNeue.ttf' 

prop = font_manager.FontProperties(fname=path) 
prop.set_weight = 'light' 
mpl.rcParams['font.family'] = prop.get_name() 
mpl.rcParams['font.weight'] = 'light' 

fig, ax = plt.subplots() 
ax.set_title('Text in a cool font', fontproperties=prop, size=40) 
plt.savefig('/tmp/test2.png') 

但它沒有區別。

/usr/local/lib/python2.7/dist-packages/matplotlib-1.3.0-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:1236: 
UserWarning: findfont: Font family ['Helvetica Neue'] not found. Falling back to Bitstream Vera Sans 

但是,我似乎只用這個Helvetica/Helvetica Neue字體遇到此問題。 (prop.get_family(),self.defaultFamily [fontext]))

+1

在嘗試更改默認設置之前,您是否能夠直接/明確地使用新字體? http://stackoverflow.com/a/18821968/1643946顯示了一種列出python/mpl可用的字體的方法,您可以嘗試使用'plt.text(1,'rattling',font_family =「Helvetica Neue 「)'。另見http://stackoverflow.com/a/16574948/1643946 – Bonlenfum

+0

公平點。我現在嘗試沒有成功。據此編輯問題。 – gozzilli

+0

你可以嘗試從主分支安裝嗎?最近有一些與字體查找有關的工作。它看起來像字體名稱中沒有ascii,iirc上游有一個錯誤使得它不起作用。 – tacaswell

回答

13

這不會改變你永久的字體,但它是值得一試

matplotlib.rc('font', family='sans-serif') 
matplotlib.rc('font', serif='Helvetica Neue') 
matplotlib.rc('text', usetex='false') 
matplotlib.rcParams.update({'font.size': 22}) 
+1

我認爲問題不在於默認行爲,而是因爲它不識別我的Helvetica Neue字體。我在github上提交了一個bug。 – gozzilli

+0

我正在使用EPD python版本(https://www.enthought。com/products/epd /)和Helvetica Neue在那裏得到認可。 – Brian

+1

太好了,謝謝。在什麼操作系統?在我的EPD(Canopy實際上)上,它也可以工作,但在Ubuntu上它不起作用。 – gozzilli

8

Ubuntu的14。04 LTS

上傳的字體

sudo cp NotoSansKR-Regular.otf /usr/share/fonts/ 

更新字體

sudo fc-cache -fv 

您可以檢查字體列表

fc-list 

重新啓動的IPython等緩存 檢查字體列表

[f.name for f in matplotlib.font_manager.fontManager.ttflist] 

乘坐你的字體名稱

import matplotlib.pyplot as plt 
from matplotlib import rcParams 
rcParams['font.family'] = 'Noto Sans Korean' 

繪製

plt.title(u'한글 제목') 
plt.xlabel(u'한글 축 이름') 
plt.plot(range(5)) 
+0

看起來不錯,但不起作用:'[f.name for f在matplotlib.font_manager.fontManager.ttflist]'給出'AttributeError:'module'對象沒有屬性'font_manager'' –

+1

你可以試試這個命令''' import matplotlib.font_manager''' –

+0

有時'matplotlib.font_manager._rebuild()'需要使用新的字體 – Tobias

1

字體緩存在我不同的地方(.cache/matplotlib/fontList.cache)顯示出來。而之前,我確實在不同的地方有三個人莫名其妙:/

也許嘗試在你的home目錄下尋找它:

find ~/ -name fontList.cache -exec rm {} \; 
1

金已經推出了動態解決方案完美的作品,這裏是另外兩種方式做靜態相同。

首先,您可以將一行代碼放入matplotlib的rc文件中。有關查找文件和詳細設置的更多信息,請參閱this page

font.family : NanumGothic 

其次,如果您正在使用IPython的工作,你可以把對字體設置一些命令來配置文件的交互的shell。找到通常位於〜/ .ipython/somewhere下的名爲ipython_config.py的文件。然後再添加兩行到列表c.InteractiveShellApp.exec_lines。

c.InteractiveShellApp.exec_lines = [ 
    "import matplotlib as mpl", 
    "mpl.rcParams['font.family'] = 'NanumGothic'" 
] 

前始終有效無論你的環境上運行,因爲它在你的腳本進口matplotlib加載的字體您的shell腳本。