cannot change font to Helvetica in Matplotlib in Python on Mac OS X 10.6
Step-by-step solution for OS X 10.11 El Capitan and Python 3 (based on this post).
- Install fondu:
brew install fondu
-
Find out matplotlib location:
python3 -c "import matplotlib ; print(matplotlib.matplotlib_fname())"
For me it's
/usr/local/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
-
Make a copy of Helvetica:
mkdir ~/Desktop/font_copies cp /System/Library/Fonts/Helvetica.dfont ~/Desktop/font_copies
-
Convert the Helvetica copy we've made from
dfont
tottf
:cd /usr/local/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf/ fondu -show ~/Desktop/font_copies/Helvetica.dfont
Remove font cache:
rm ~/.matplotlib/fontList.py3k.cache
Done! Now you can use Helvetica:
import matplotlib.pyplot as plt
plt.rc('font', family='Helvetica')
Admin
Updated on June 14, 2022Comments
-
Admin almost 2 years
I am trying to change the matplotlib font to helvetica, which I'd like to use in a PDF plot. I try the following:
import matplotlib matplotlib.use('PDF') import matplotlib.pylab as plt from matplotlib import rc plt.rcParams['ps.useafm'] = True rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) plt.rcParams['pdf.fonttype'] = 42
This does not work -- when I run my code with --verbose-debug, I get the error:
backend WXAgg version 2.8.10.1 /Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/site-packages/matplotlib/__init__.py:833: UserWarning: This call to matplotlib.use() has no effect because the the backend has already been chosen; matplotlib.use() must be called *before* pylab, matplotlib.pyplot, or matplotlib.backends is imported for the first time. findfont: Could not match :family=sans-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=medium. Returning /Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf Assigning font /F1 = /Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf Embedding font /Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf Writing TrueType font
So apparently it cannot find Helvetica. I am not sure why. I have Helvetica in the afm directory of mpl-data, and when matplotlib initiates it reads it and outputs:
createFontDict: /Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/site-packages/matplotlib/mpl-data/fonts/afm/Helvetica.afm
Do I need a special .ttf Helvetica font in addition? If so, how can I get it? I know I have Helvetica on my system since I see it in Illustrator and many other programs.
I am using Enthought Python distribution as follows:
$ python Enthought Python Distribution -- http://www.enthought.com Version: 6.2-2 (32-bit) Python 2.6.5 |EPD 6.2-2 (32-bit)| (r265:79063, May 28 2010, 15:13:03) [GCC 4.0.1 (Apple Inc. build 5488)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import matplotlib >>> matplotlib.__version__ '0.99.3'
Any ideas how this can be fixed?
thanks.