Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change Matplotlib's default font

I'm trying to change matplotlib's default font to Helvetica Neue. On my Mac with EPD/Canopy everything worked fine some time ago.

Trying to do the same on ubuntu now and it's not working.

This is what I did:

  1. Installed Helvetica Neue

    $ fc-match 'Helvetica Neue':Light HelveticaNeue-Light.otf: "Helvetica Neue" "細體" 
  2. Converted the odt/dfont into ttf:

    fondu -show HelveticaNeue.dfont 
  3. changed matplotlibrc to

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

    I also tried with:

    font.family: sans-serif font.sans-serif: Helvetica Neue 
  4. I removed the font cache

    rm ~/.config/matplotlib/fontList.cache 

But none of these steps are working for me.

    $ 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]))

Version is 1.3.0

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

I also tried moving the fonts to ~/.config/matplotlib/fonts/ttf but it didn't work.


EDIT: As suggested I tried selecting a specific font for a specific text.

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') 

But it makes no difference.

/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 

However I seem to experience this problem only with this Helvetica/Helvetica Neue font. (prop.get_family(), self.defaultFamily[fontext]))

like image 525
gozzilli Avatar asked Jan 30 '14 15:01

gozzilli


People also ask

What is Matplotlib's default font?

The default font has changed from "Bitstream Vera Sans" to "DejaVu Sans".

Can you change the font in Matplotlib?

You can set the fontsize argument, change how Matplotlib treats fonts in general, or even changing the figure size.

How do I change the font of a graph in Matplotlib?

Plot x data points using plot() method. To change the font size of the scale in matplotlib, we can use labelsize in the ticks_params()method. To display the figure, use show() method.


2 Answers

This will not change your font permanently, but it's worth a try.

matplotlib.rc('font', family='sans-serif')  matplotlib.rc('font', serif='Helvetica Neue')  matplotlib.rc('text', usetex='false')  matplotlib.rcParams.update({'font.size': 22}) 
like image 97
Brian Avatar answered Oct 08 '22 23:10

Brian


Ubuntu 14.04 LTS

Upload the fonts

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

Update the cache of font

sudo fc-cache -fv 

You can check the font list

fc-list 

Restart ipython, etc. Check the font list

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

Take a your font name

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

Draw

plt.title(u'한글 제목') plt.xlabel(u'한글 축 이름') plt.plot(range(5)) 
like image 27
KyungHoon Kim Avatar answered Oct 08 '22 23:10

KyungHoon Kim