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?

Buka jalannya
sumber
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

mechanical_meat
sumber
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.

Autiwa
sumber
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)
scottlittle
sumber
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 
pengguna2468932
sumber
36
plt.tick_params(axis='both', which='minor', labelsize=12)
jingweimo
sumber
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

Kyle Swanson
sumber
22

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

Christoph
sumber
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()]
ATX_Bigfoot
sumber
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!

Pengyao
sumber
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.

Cryptoman
sumber