Jak ustawić czcionkę etykiet TITLE i axes w Matplotlib?

Tworzę figurę w Matplotlib TAK:

from matplotlib import pyplot as plt

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')

Chcę określić rozmiar czcionki dla tytułu rysunku i etykiet osi. Wszystkie trzy muszą mieć różne rozmiary czcionek, więc ustawienie globalnego rozmiaru czcionki (mpl.rcParams['font.size']=x) nie jest tym, czego chcę. Jak ustawić indywidualnie rozmiary czcionek dla tytułu rysunku i etykiet osi?

Author: Peter Mortensen, 2012-09-16

9 answers

Funkcje zajmujące się tekstem jak label, title, itd. Akceptuj parametry takie same jak matplotlib.text.Text. Dla rozmiaru czcionki można użyć size/fontsize:

from matplotlib import pyplot as plt    

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title', fontsize=20)
plt.xlabel('xlabel', fontsize=18)
plt.ylabel('ylabel', fontsize=16)
fig.savefig('test.jpg')

Dla globalnie ustawianych rozmiarów title i label , mpl.rcParams zawiera axes.titlesize i axes.labelsize. (Ze strony):

axes.titlesize      : large   # fontsize of the axes title
axes.labelsize      : medium  # fontsize of the x any y labels

(z tego co widzę, nie ma możliwości oddzielenia rozmiarów etykiet x i y.)

I widzę, że axes.titlesize nie wpływa na suptitle. Chyba musisz to ustawić ręcznie.

 899
Author: Avaris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-10 19:30:47

Możesz to zrobić również globalnie poprzez słownik rcParams:

import matplotlib.pylab as pylab
params = {'legend.fontsize': 'x-large',
          'figure.figsize': (15, 5),
         'axes.labelsize': 'x-large',
         'axes.titlesize':'x-large',
         'xtick.labelsize':'x-large',
         'ytick.labelsize':'x-large'}
pylab.rcParams.update(params)
 116
Author: tsando,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 17:13:01

Jeśli jesteś bardziej przyzwyczajony do używania ax obiektów do tworzenia wykresów, może okazać się, że ax.xaxis.label.set_size() jest łatwiejsza do zapamiętania, a przynajmniej łatwiejsza do znalezienia za pomocą karty w terminalu ipython. Wydaje się, że potrzeba operacji przerysowania, aby zobaczyć efekt. Na przykład:

import matplotlib.pyplot as plt

# set up a plot with dummy data
fig, ax = plt.subplots()
x = [0, 1, 2]
y = [0, 3, 9]
ax.plot(x,y)

# title and labels, setting initial sizes
fig.suptitle('test title', fontsize=12)
ax.set_xlabel('xlabel', fontsize=10)
ax.set_ylabel('ylabel', fontsize='medium')   # relative to plt.rcParams['font.size']

# setting label sizes after creation
ax.xaxis.label.set_size(20)
plt.draw()

Nie znam podobnego sposobu, aby ustawić rozmiar suptitle po jego utworzeniu.

 87
Author: spinup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 18:27:36

Aby zmodyfikować tylko czcionkę tytułu (a nie czcionkę osi) użyłem tego:

import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'})

Fontdict akceptuje wszystkie kwarki z matplotlib.tekst.Tekst .

 26
Author: tammoj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-24 23:27:47

Zgodnie z oficjalnym przewodnikiem stosowanie pylab nie jest już zalecane. matplotlib.pyplot powinny być używane bezpośrednio zamiast.

Globalnie ustawianie rozmiarów czcionek za pomocą rcParams powinno odbywać się za pomocą

import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 16
plt.rcParams['axes.titlesize'] = 16

# or

params = {'axes.labelsize': 16,
          'axes.titlesize': 16}
plt.rcParams.update(params)

# or

import matplotlib as mpl
mpl.rc('axes', labelsize=16, titlesize=16)

# or 

axes = {'labelsize': 16,
        'titlesize': 16}
mpl.rc('axes', **axes)

Wartości domyślne można przywrócić za pomocą

plt.rcParams.update(plt.rcParamsDefault)

Można to również zrobić, tworząc arkusz stylów w katalogu stylelib pod katalogiem konfiguracyjnym matplotlib (można pobrać katalog konfiguracji z matplotlib.get_configdir()). Arkusz stylów format to

axes.labelsize: 16
axes.titlesize: 16

Jeśli masz arkusz stylów w /path/to/mpl_configdir/stylelib/mystyle.mplstyle, możesz go użyć poprzez

plt.style.use('mystyle')

# or, for a single section

with plt.style.context('mystyle'):
    # ...
Możesz również utworzyć (lub zmodyfikować) plik matplotlibrc , który dzieli format
axes.labelsize = 16
axes.titlesize = 16

W zależności od tego, który plik matplotlibrc zmodyfikujesz te zmiany będą używane tylko dla bieżącego katalogu roboczego, dla wszystkich katalogów roboczych, które mają nie mają plik matplotlibrc, lub dla wszystkich katalogów roboczych, które mają nie mają plik matplotlibrc i gdzie nie podano innego pliku matplotlibrc. Zobacz Ta sekcja dostosowywanie strony matplotlib aby uzyskać więcej szczegółów.

Pełną listę klawiszy rcParams można pobrać za pomocą plt.rcParams.keys(), ale do dostosowania rozmiaru czcionki masz (kursywę cytowaną z tutaj )

  • axes.labelsize - wielkość liter x i y
  • axes.titlesize - Fontsize: s POS title
  • figure.titlesize - wielkość tytułu rysunku (Figure.suptitle())
  • xtick.labelsize - Fontsize: s POS: [72]}
  • ytick.labelsize - Fontsize: s POS: [72]}
  • legend.fontsize - Fontsize: s (plt.legend(), fig.legend())
  • legend.title_fontsize - Fontsize dla tytułów legend, None ustawia na takie same jak domyślne osie. Zobacz ta odpowiedź dla przykładu użycia.

Wszystkie, które akceptują rozmiary łańcuchów {'xx-small', 'x-small', 'smaller', 'small', 'medium', 'large', 'larger', 'x-large', 'xxlarge'} lub float w pt. Rozmiary łańcuchów są definiowane względem domyślnej czcionki rozmiar, który jest określony przez

  • font.size - domyślny rozmiar czcionki dla tekstu, podany w pkt. 10 pkt jest wartością standardową

Dodatkowo, waga może być określona (choć tylko dla domyślnej) przez

  • font.weight - domyślna waga czcionki używanej przez text.Text. Przyjmuje {100, 200, 300, 400, 500, 600, 700, 800, 900} lub 'normal' (400), 'bold' (700), 'lighter', oraz 'bolder' (względny względem aktualnej wagi).
 22
Author: William Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-16 01:46:31

Inni dostarczyli odpowiedzi, jak zmienić rozmiar etykiety, ale jeśli chodzi o rozmiar etykiety osi, możesz również użyć metody set_tick_params .

Np., aby Rozmiar etykiety znacznika osi X był mały:

ax.xaxis.set_tick_params(labelsize='small')

Lub, aby etykieta na osi Y była duża:

ax.yaxis.set_tick_params(labelsize='large')

Możesz również wprowadzić labelsize jako zmiennoprzecinkowy lub jedną z następujących opcji: 'xx-small',' x-small',' small',' medium',' large',' x-large 'lub'xx-large'.

 5
Author: Jeff Galef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-20 20:14:38

Alternatywnym rozwiązaniem dla zmiany rozmiaru czcionki jest zmiana wypełnienia. Gdy Python zapisuje plik PNG, można zmienić układ za pomocą okna dialogowego, które zostanie otwarte. Odstępy między osiami, wyściółki, jeśli chcesz, mogą być zmieniane na tym etapie.

 2
Author: Naz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-09 21:24:00

Miejsce right_ax przed set_ylabel()

ax.right_ax.set_ylabel('AB scale')

 2
Author: Chane Badr Eddine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-21 18:51:02

7 (najlepsze rozwiązanie)

 from numpy import*
 import matplotlib.pyplot as plt
 X = linspace(-pi, pi, 1000)

class Crtaj:

    def nacrtaj(self,x,y):
         self.x=x
         self.y=y
         return plt.plot (x,y,"om")

def oznaci(self):
    return plt.xlabel("x-os"), plt.ylabel("y-os"), plt.grid(b=True)

6 (nieco gorsze rozwiązanie)

from numpy import*
M = array([[3,2,3],[1,2,6]])
class AriSred(object):
    def __init__(self,m):
    self.m=m
    
def srednja(self):
    redovi = len(M)
    stupci = len (M[0])
    lista=[]
    a=0
    suma=0
    while a<stupci:
        for i in range (0,redovi):
            suma=suma+ M[i,a]
        lista.append(suma)
        a=a+1
        suma=0
    b=array(lista) 
    b=b/redovi
    return b



OBJ = AriSred(M)
sr = OBJ.srednja()
 -4
Author: shapeshifter123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55