Matplotlib membuat ukuran label centang centang lebih kecil


299

Dalam gambar matplotlib, bagaimana saya bisa membuat ukuran font untuk label centang menggunakan ax1.set_xticklabels()lebih kecil?

Lebih lanjut, bagaimana seseorang dapat memutarnya dari horizontal ke vertikal?


Terima kasih telah mengajukan pertanyaan ini, saya mencoba menyelesaikan masalah ini sekarang. Saya tidak memiliki pendapat kuat di sini, tetapi sepertinya para pemilih berpikir jawaban terbaik bukan yang diterima. Bagaimana menurut anda?
Aaron Hall

apakah saya benar membaca bahwa setidaknya ada 5 cara berbeda untuk mengubah ukuran font di matplotlib? : D
famargar

Jawaban:


127

Harap perhatikan bahwa versi MPL yang lebih baru memiliki pintasan untuk tugas ini. Contoh ditampilkan dalam jawaban lain untuk pertanyaan ini: https://stackoverflow.com/a/11386056/42346

Kode di bawah ini untuk tujuan ilustrasi dan mungkin belum tentu dioptimalkan.

import matplotlib.pyplot as plt
import numpy as np

def xticklabels_example():
    fig = plt.figure() 

    x = np.arange(20)
    y1 = np.cos(x)
    y2 = (x**2)
    y3 = (x**3)
    yn = (y1,y2,y3)
    COLORS = ('b','g','k')

    for i,y in enumerate(yn):
        ax = fig.add_subplot(len(yn),1,i+1)

        ax.plot(x, y, ls='solid', color=COLORS[i]) 

        if i != len(yn) - 1:
            # all but last 
            ax.set_xticklabels( () )
        else:
            for tick in ax.xaxis.get_major_ticks():
                tick.label.set_fontsize(14) 
                # specify integer or one of preset strings, e.g.
                #tick.label.set_fontsize('x-small') 
                tick.label.set_rotation('vertical')

    fig.suptitle('Matplotlib xticklabels Example')
    plt.show()

if __name__ == '__main__':
    xticklabels_example()

masukkan deskripsi gambar di sini


84
Sama seperti kata sampingan: Alih-alih memutar melalui objek label centang, Anda dapat menggunakan plt.setp. (Juga, lihatlah ax.tick_params) Misalnya, Anda bisa melakukannya plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14). Juga, objek sumbu memiliki ax.is_last_row()metode yang dapat berguna dalam kasus-kasus seperti contoh Anda. Alih-alih if i != len..., Anda bisa melakukannya if not ax.is_last_row(). (Mengapa ini metode, saya tidak tahu ... Matplotlib membenci properti, rupanya!)
Joe Kington

@ Jo: ini pertama kalinya saya mendengar tentang is_last_row(), terima kasih! Saya telah menggunakan plt.setpdi masa lalu, dan tidak selalu yakin itu mewakili cara yang lebih kanonik untuk menyesuaikan label centang. Anda telah menghapus keraguan itu, terima kasih. Secara lebih luas: jawaban Anda, terutama dalam matplotlibtag, sering membuat saya kagum. Terus bekerja dengan baik.
mechanical_meat

1
Terima kasih!! Saya menghargai kata-kata yang baik, terutama dari Anda! Canonical sangat relatif, dalam hal ini. plt.setpadalah "matlab-isme", dan loop eksplisit mungkin jauh lebih pythonic. Menjadi mualaf matlab, saya sendiri, setpterasa alami, tetapi untuk masing-masing mereka sendiri. Salah satunya cukup mudah dibaca, imo
Joe Kington

50
Dalam versi baru saya menemukan bahwa Anda harus menggunakan parameter labelsize : egax.tick_params(axis='x', labelsize=8)
Vladtn

Seharusnya get_ticklabelstidakget_major_ticks
jez

506

Sebenarnya ada cara yang lebih sederhana. Saya baru saja menemukan:

import matplotlib.pyplot as plt
# We prepare the plot  
fig, ax = plt.subplots()

# We change the fontsize of minor ticks label 
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)

Ini hanya menjawab ukuran labelsebagian dari pertanyaan Anda.


2
Gunakan axis = 'x'atau axis = 'y'untuk memodifikasi hanya satu sumbu
loved.by.Yesus

221

Untuk menentukan ukuran dan rotasi font sekaligus, coba ini:

plt.xticks(fontsize=14, rotation=90)

4
Perhatikan bahwa ini digunakan ketika bekerja dengan antarmuka pyplot seperti MATLAB. Dalam hal antarmuka berorientasi objek metode tick_params () dari objek sumbu atau metode set_tick_params () dari objek sumbu harus digunakan (lihat jawaban lain).
wombatonfire

54

Atau, Anda bisa melakukan:

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 

36
plt.tick_params(axis='both', which='minor', labelsize=12)

Ini adalah satu-satunya jawaban yang berfungsi jika Anda ingin mengubah ukuran font tanpa mengatur label baru.
David Stansby

@ DavidVansby Saya tidak percaya ini benar. Saya punya masalah persis ini (Disebutkan di atas) dan dapat menggunakan metode alternatif yang berbeda dari solusi ini. menggunakanax.xaxis.set_tick_params(labelsize=20)
Kyle Swanson

1
jawaban paling sederhana, tidak memerlukan referensi ke objek kapak
jeremy_rutman

26

Alternatif lain

Saya memiliki dua plot berdampingan dan ingin menyesuaikan label centang secara terpisah.

Solusi di atas sudah dekat tetapi mereka tidak berhasil untuk saya. Saya menemukan solusi saya dari halaman matplotlib ini .

ax.xaxis.set_tick_params(labelsize=20)

Ini berhasil dan langsung pada intinya. Untuk kasus penggunaan saya, plot di sebelah kanan yang perlu disesuaikan. Untuk plot di sebelah kiri karena saya membuat label centang baru saya dapat menyesuaikan font dalam proses yang sama seperti mengatur label.

yaitu

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)

jadi saya gunakan untuk plot yang tepat,

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

Kehalusan kecil ... Saya tahu ... tapi saya harap ini membantu seseorang :)

Poin bonus jika ada yang tahu cara menyesuaikan ukuran font dari urutan label magnitude.

masukkan deskripsi gambar di sini


22

Dalam versi Matplotlib saat ini, Anda dapat melakukannya axis.set_xticklabels(labels, fontsize='small').


1
Itu memaksa Anda untuk menentukannya labelsjuga. Lebih baik jika kita dapat mengubah ukuran font saja.
Guimoute

16

Anda juga dapat mengubah parameter tampilan label seperti ukuran huruf dengan garis seperti ini:

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]

1
Saya pikir menggunakan daftar pemahaman yang memiliki efek samping bukan praktik terbaik. Saya sarankan menggunakan standar untuk loop saja.
jjmontes

14

Untuk font yang lebih kecil, saya menggunakan

ax1.set_xticklabels(xticklabels, fontsize=7)

dan itu berhasil!


bagaimana Anda mendefinisikan xticklabels?
mLstudent33

10

Berikut ini bekerja untuk saya:

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

Keuntungan dari atas Anda tidak perlu memberikan arraydari labelsdan bekerja dengan data pada axes.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.