Propriedades de texto e layout #

Controlando propriedades de texto e seu layout com Matplotlib.

matplotlib.text.Textinstâncias têm uma variedade de propriedades que podem ser configuradas por meio de argumentos de palavra-chave para set_title, set_xlabel, text, etc.

Propriedade

Tipo de valor

alfa

float

cor de fundo

qualquer cor matplotlib

bbox

Rectangleprop dict plus key 'pad'que é um pad em pontos

clip_box

uma instância matplotlib.transform.Bbox

grampear

bool

clip_path

uma Pathinstância e uma Transforminstância, umaPatch

cor

qualquer cor matplotlib

família

[ 'serif'| 'sans-serif'| 'cursive'| 'fantasy'| 'monospace']

propriedades da fonte

FontProperties

alinhamento horizontal ou ha

[ 'center'| 'right'| 'left']

etiqueta

qualquer string

espaçamento entre linhas

float

multialinhamento

[ 'left'| 'right'| 'center']

nome ou nome da fonte

string por exemplo, [ 'Sans'| 'Courier'| 'Helvetica'...]

selecionador

[Nenhum|float|bool|callable]

posição

(x,y)

rotação

[ ângulo em graus | 'vertical'| 'horizontal']

tamanho ou tamanho da fonte

[ tamanho em pontos | tamanho relativo, por exemplo, 'smaller', 'x-large']

estilo ou estilo de fonte

[ 'normal'| 'italic'| 'oblique']

texto

string ou qualquer coisa imprimível com conversão '%s'

transformar

Transformsubclasse

variante

[ 'normal'| 'small-caps']

alinhamento vertical ou va

[ 'center'| 'top'| 'bottom'| 'baseline']

visível

bool

peso ou peso da fonte

[ 'normal'| 'bold'| 'heavy'| 'light'| 'ultrabold'| 'ultralight']

x

float

y

float

zorder

qualquer número

Você pode dispor o texto com os argumentos horizontalalignmentde alinhamento verticalalignment, e multialignment. horizontalalignmentcontrola se o argumento posicional x para o texto indica o lado esquerdo, central ou direito da caixa delimitadora de texto. verticalalignmentcontrola se o argumento posicional y para o texto indica a parte inferior, central ou superior da caixa delimitadora de texto. multialignment, apenas para strings separadas por nova linha, controla se as diferentes linhas são justificadas à esquerda, ao centro ou à direita. Aqui está um exemplo que usa o text()comando para mostrar as várias possibilidades de alinhamento. O uso de transform=ax.transAxesao longo do código indica que as coordenadas são dadas em relação à caixa delimitadora dos eixos, sendo (0, 0) o canto inferior esquerdo dos eixos e (1, 1) o canto superior direito.

import matplotlib.pyplot as plt
import matplotlib.patches as patches

# build a rectangle in axes coords
left, width = .25, .5
bottom, height = .25, .5
right = left + width
top = bottom + height

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])

# axes coordinates: (0, 0) is bottom left and (1, 1) is upper right
p = patches.Rectangle(
    (left, bottom), width, height,
    fill=False, transform=ax.transAxes, clip_on=False
    )

ax.add_patch(p)

ax.text(left, bottom, 'left top',
        horizontalalignment='left',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(left, bottom, 'left bottom',
        horizontalalignment='left',
        verticalalignment='bottom',
        transform=ax.transAxes)

ax.text(right, top, 'right bottom',
        horizontalalignment='right',
        verticalalignment='bottom',
        transform=ax.transAxes)

ax.text(right, top, 'right top',
        horizontalalignment='right',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(right, bottom, 'center top',
        horizontalalignment='center',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(left, 0.5*(bottom+top), 'right center',
        horizontalalignment='right',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(left, 0.5*(bottom+top), 'left center',
        horizontalalignment='left',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(0.5*(left+right), 0.5*(bottom+top), 'middle',
        horizontalalignment='center',
        verticalalignment='center',
        fontsize=20, color='red',
        transform=ax.transAxes)

ax.text(right, 0.5*(bottom+top), 'centered',
        horizontalalignment='center',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(left, top, 'rotated\nwith newlines',
        horizontalalignment='center',
        verticalalignment='center',
        rotation=45,
        transform=ax.transAxes)

ax.set_axis_off()
plt.show()
adereços de texto

Fonte padrão #

A fonte padrão base é controlada por um conjunto de rcParams. Para definir a fonte para expressões matemáticas, use rcParams começando com mathtext (consulte mathtext ).

rcParam

uso

'font.family'

Lista de famílias de fontes (instaladas na máquina do usuário) e/ou .{'cursive', 'fantasy', 'monospace', 'sans', 'sans serif', 'sans-serif', 'serif'}

'font.style'

O estilo padrão, ex 'normal', 'italic'.

'font.variant'

Variante padrão, ex 'normal', 'small-caps' (não testada)

'font.stretch'

Alongamento padrão, ex 'normal', 'condensed' (incompleto)

'font.weight'

Peso padrão. String ou inteiro

'font.size'

Tamanho de fonte padrão em pontos. Tamanhos de fonte relativos ( 'large', 'x-small') são calculados em relação a esse tamanho.

Matplotlib pode usar famílias de fontes instaladas no computador do usuário, ou seja, Helvetica, Times, etc. As famílias de fontes também podem ser especificadas com aliases de famílias genéricas como ( ).{'cursive', 'fantasy', 'monospace', 'sans', 'sans serif', 'sans-serif', 'serif'}

Observação

Para acessar a lista completa de fontes disponíveis:

matplotlib.font_manager.get_font_names()

O mapeamento entre os aliases de famílias genéricas e as famílias de fontes reais (mencionadas no padrão rcParams ) é controlado pelos seguintes rcParams:

Alias ​​de família genérica baseada em CSS

rcParam com mapeamentos

'serif'

'font.serif'

'monospace'

'font.monospace'

'fantasy'

'font.fantasy'

'cursive'

'font.cursive'

{'sans', 'sans serif', 'sans-serif'}

'font.sans-serif'

Se algum nome de família genérico aparecer em 'font.family', substituímos essa entrada por todas as entradas no mapeamento rcParam correspondente. Por exemplo:

matplotlib.rcParams['font.family'] = ['Family1', 'serif', 'Family2']
matplotlib.rcParams['font.serif'] = ['SerifFamily1', 'SerifFamily2']

# This is effectively translated to:
matplotlib.rcParams['font.family'] = ['Family1', 'SerifFamily1', 'SerifFamily2', 'Family2']

Texto com glifos não latinos #

A partir da v2.0, a fonte padrão , DejaVu, contém glifos para muitos alfabetos ocidentais, mas não para outros scripts, como chinês, coreano ou japonês.

Para definir a fonte padrão para ser compatível com os pontos de código necessários, anexe o nome da fonte a 'font.family'(recomendado) ou às listas de alias desejadas.

# first method
matplotlib.rcParams['font.family'] = ['Source Han Sans TW', 'sans-serif']

# second method
matplotlib.rcParams['font.family'] = ['sans-serif']
matplotlib.rcParams['sans-serif'] = ['Source Han Sans TW', ...]

As listas de alias de família genérica contêm fontes que são enviadas junto com o Matplotlib (para que tenham 100% de chance de serem encontradas) ou fontes que têm uma probabilidade muito alta de estarem presentes na maioria dos sistemas.

Uma boa prática ao definir famílias de fontes personalizadas é anexar uma família genérica à lista de famílias de fontes como último recurso.

Você também pode configurá-lo em seu .matplotlibrcarquivo:

font.family: Source Han Sans TW, Arial, sans-serif

Para controlar a fonte usada por artista, use os argumentos de palavra-chave name , fontname ou fontproperties documentados acima .

No linux, fc-list pode ser uma ferramenta útil para descobrir o nome da fonte; por exemplo

$ fc-list :lang=zh family
Noto to Sans Mono CJK TC,Noto Sans Mono CJK TC Bold
Noto Sans CJK TC,Noto Sans CJK TC Medium
Noto Sans CJK TC,Noto Sans CJK TC DemiLight
Noto Sans CJK KR,Noto Sans CJK KR Black
Noto Sans CJK TC,Noto Sans CJK TC Black
Noto Sans Mono CJK TC,Noto Sans Mono CJK TC Regular
Noto Sans CJK SC,Noto Sans CJK SC Light

lista todas as fontes que suportam chinês.

Galeria gerada por Sphinx-Gallery