Я рисую график, и мне нужно использовать определенный шрифт везде в нем. Я обнаружил, как использовать пользовательский шрифт при использовании matplotlib.pyplot.text
:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np
import pandas as pd
font_black = "fonts/Montserrat_Black.ttf" # A local file
font_light = "fonts/Montserrat_Light.ttf" # Another local file
plt.text( 0.5, 0.5, "Wuz hatnen?"
, fontproperties =
fm.FontProperties(fname=font_black) )
plt.show()
Но мне нужно использовать этот шрифт во многих других видах текста - заголовок, метки осей, метки галочек, легенда и текст, нарисованный с помощью Axes.text
. Я надеюсь, что есть глобальный элемент управления, который изменяет шрифт, используемый для всего на графике. Я надеялся на matplotlilb.pyplot.rc
, но не смог заставить его работать. Я также пытался использовать отдельные функции настройки текста, такие как Axes.set_title
(а не более общие Axes.set
), но также не смог заставить это работать.
Следующее демонстрирует все виды вещей, которые я рисую; это работает, но не делает шрифты.
df = pd.DataFrame( { "2014": [1,2,3,4]
, "2015": [3,4,5,1] }
, index=["Saturn","hedgehog","abstract","crunk"] )
_,ax = plt.subplots()
nCols = len( df.columns )
nRows = len( df.index )
xvals = np.arange( nCols )
if True: # Draw stuff.
plots = {}
for rn in range(nRows):
if True: # Irrelevant details -- stack some box plots.
if rn < 1: bottom = [0. for i in range(nCols)]
else: bottom = df.iloc[0:rn,:].sum()
top = bottom + df.iloc[ rn,:]
plots[rn] = ax.bar(
xvals
, df.iloc[rn,:]
, width = [ 0.8 for i in range( nCols ) ]
, bottom = bottom )
for cn in range( nCols ): # Overlay text onto the box plot boxes
ax.text( float( cn )
, ((bottom + top) / 2)[cn]
, df.iloc[ rn, cn ]
, fontsize=10
, verticalalignment='center'
, horizontalalignment='center' )
plt.legend( plots.values(), df.index ) # Another kind of text
ax.set( title="What it is" # Another kind of text
, xlabel="Year" # Another kind of text
, ylabel='Real spending (2019 pesos)' ) # Another kind of text
plt.show()