Matplotlib fonts in Enthought Canopy

前端 未结 3 1921
盖世英雄少女心
盖世英雄少女心 2020-12-28 08:54

I am using the matplotlib library inside Canopy, and the specific function is xkcd(). This function uses a specific font to plot charts. The font is Comic Sans MS, which if

相关标签:
3条回答
  • 2020-12-28 09:28

    I have the (unfortunate) requirement of working in a Windows environment and came across the same problem. The one thing I would add to this for those working in Windows is that it is not necessarily the name of the file that is important but the title of the font.

    For my problem, downloaded helvetica.ttf and put it into the directory

    C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
    

    However, as the properties of the file listed the font's title as "Helvetica-normal" I needed to make sure that I was specifying

    font.sans-serif      : Helvetica-normal
    

    in my matplotlibrc file, even though the name of the file was simply "helvetica.ttf"

    0 讨论(0)
  • 2020-12-28 09:30

    After a lot of research, and not finding anybody who could help me with my question, I was able to answer my own question. This is what I did:

    First, I found exactly where all the fonts are in within matplotlib in the virtual environment of Enthought Canopy:

    luis@luis-VirtualBox:~$ find -iname '*.ttf'
    

    A long list is generated, with results similar to this:

    ./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf
    ./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoBI.ttf
    ./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf
    ./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf
    ./Canopy/appdata/canopy-1.1.0.1371.rh5-x86_64/lib/python2.7/site-packages/canopy/resources/fonts/Inconsolata.ttf
    

    I could not see the 'Humor-Sans-1.0.ttf' file/font anywhere, so I manually downloaded and copied it to the directory:

    ./Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/

    Still, the chart was defaulting to another font:

    Font family ['Humor Sans', 'Comic Sans MS'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))
    

    Then I noticed that the font I had downloaded was 'Humor-Sans-1.0.ttf' and the error messages was referring to 'Humor Sans' and 'Comic Sans' (without the 1.0 appendix). So I made two copies of the same file, inside the same directory and called them 'Humor-Sans.ttf' and 'Comic-Sans.ttf' respectively.

    Next, I found where the matplotlib fontCache list resides within my virtual environment:

    luis@luis-VirtualBox:~$ find -iname 'fontList.cache'
    ./.cache/matplotlib/fontList.cache
    

    Then removed the cache:

    luis@luis-VirtualBox:~$ rm ./.cache/matplotlib/fontList.cache
    

    After that, I opened my Canopy Editor, opened an iPython notebook, wrote some code, plotted some graphs, and presto, my fonts were right!

    final output

    Not the most elegant solution, but it worked for me.

    0 讨论(0)
  • 2020-12-28 09:54

    This worked for me, and had the benefit of being something I could do from within a jupyter notebook, too:

    Just type the following from within the python console (or your jupyter notebook):

    matplotlib.font_manager._rebuild()
    
    0 讨论(0)
提交回复
热议问题