.. note::
    :class: sphx-glr-download-link-note

    Click :ref:`here <sphx_glr_download_gallery_text_labels_and_annotations_font_table_ttf_sgskip.py>` to download the full example code
.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_text_labels_and_annotations_font_table_ttf_sgskip.py:


==============
Font Table TTF
==============

Matplotlib has support for FreeType fonts.  Here's a little example
using the 'table' command to build a font table that shows the glyphs
by character code.

Usage python font_table_ttf.py somefile.ttf




.. code-block:: python


    import sys
    import os

    import matplotlib
    from matplotlib.ft2font import FT2Font
    from matplotlib.font_manager import FontProperties
    import matplotlib.pyplot as plt

    # the font table grid

    labelc = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
              'A', 'B', 'C', 'D', 'E', 'F']
    labelr = ['00', '10', '20', '30', '40', '50', '60', '70', '80', '90',
              'A0', 'B0', 'C0', 'D0', 'E0', 'F0']

    if len(sys.argv) > 1:
        fontname = sys.argv[1]
    else:
        fontname = os.path.join(matplotlib.get_data_path(),
                                'fonts', 'ttf', 'DejaVuSans.ttf')

    font = FT2Font(fontname)
    codes = sorted(font.get_charmap().items())

    # a 16,16 array of character strings
    chars = [['' for c in range(16)] for r in range(16)]
    colors = [[(0.95, 0.95, 0.95) for c in range(16)] for r in range(16)]

    plt.figure(figsize=(8, 4), dpi=120)
    for ccode, glyphind in codes:
        if ccode >= 256:
            continue
        r, c = divmod(ccode, 16)
        s = chr(ccode)
        chars[r][c] = s

    lightgrn = (0.5, 0.8, 0.5)
    plt.title(fontname)
    tab = plt.table(cellText=chars,
                    rowLabels=labelr,
                    colLabels=labelc,
                    rowColours=[lightgrn] * 16,
                    colColours=[lightgrn] * 16,
                    cellColours=colors,
                    cellLoc='center',
                    loc='upper left')

    for key, cell in tab.get_celld().items():
        row, col = key
        if row > 0 and col > 0:
            cell.set_text_props(fontproperties=FontProperties(fname=fontname))
    plt.axis('off')
    plt.show()


.. _sphx_glr_download_gallery_text_labels_and_annotations_font_table_ttf_sgskip.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example



  .. container:: sphx-glr-download

     :download:`Download Python source code: font_table_ttf_sgskip.py <font_table_ttf_sgskip.py>`



  .. container:: sphx-glr-download

     :download:`Download Jupyter notebook: font_table_ttf_sgskip.ipynb <font_table_ttf_sgskip.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    Keywords: matplotlib code example, codex, python plot, pyplot
    `Gallery generated by Sphinx-Gallery
    <https://sphinx-gallery.readthedocs.io>`_
