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?
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?
Jawaban:
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()
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!)
is_last_row()
, terima kasih! Saya telah menggunakan plt.setp
di 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 matplotlib
tag, sering membuat saya kagum. Terus bekerja dengan baik.
plt.setp
adalah "matlab-isme", dan loop eksplisit mungkin jauh lebih pythonic. Menjadi mualaf matlab, saya sendiri, setp
terasa alami, tetapi untuk masing-masing mereka sendiri. Salah satunya cukup mudah dibaca, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
tidakget_major_ticks
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 label
sebagian dari pertanyaan Anda.
axis = 'x'
atau axis = 'y'
untuk memodifikasi hanya satu sumbu
Untuk menentukan ukuran dan rotasi font sekaligus, coba ini:
plt.xticks(fontsize=14, rotation=90)
Atau, Anda bisa melakukan:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
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.
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()]
Untuk font yang lebih kecil, saya menggunakan
ax1.set_xticklabels(xticklabels, fontsize=7)
dan itu berhasil!