Saya ingin membuat beberapa modifikasi pada beberapa label centang yang dipilih dalam plot.
Misalnya, jika saya lakukan:
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
ukuran font dan orientasi label centang diubah.
Namun, jika coba:
label.set_text('Foo')
label centang tidak dimodifikasi. Juga jika saya lakukan:
print label.get_text()
tidak ada yang dicetak.
Inilah beberapa keanehan lainnya. Ketika saya mencoba ini:
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
Hanya string kosong yang dicetak, tetapi plot berisi kutu berlabel '0,0', '0,5', '1,0', '1,5', dan '2,0'.
python
matplotlib
repoman
sumber
sumber
draw()
sebelum mencoba mencetak label, Anda akan mendapatkan apa yang Anda harapkan. Mengatur label centang individual sayangnya merupakan sentuhan yang lebih sulit (apa yang terjadi adalah bahwa locator dan formatter tick belum direset dan menimpa hal-hal ketika Andaset_text
). Saya akan menambahkan contoh sedikit, jika seseorang tidak mengalahkan saya untuk itu. Saya harus naik bus, saat ini.Jawaban:
Peringatan: Kecuali jika ticklabels sudah diset ke string (seperti biasanya dalam contoh boxplot), ini tidak akan berfungsi dengan versi matplotlib mana pun yang lebih baru daripada
1.1.0
. Jika Anda bekerja dari master github saat ini, ini tidak akan berfungsi. Saya belum yakin apa masalahnya ... Mungkin ini adalah perubahan yang tidak disengaja, atau mungkin tidak ...Biasanya, Anda akan melakukan sesuatu seperti ini:
Untuk memahami alasan mengapa Anda harus melewati begitu banyak simpai, Anda perlu memahami sedikit lebih banyak tentang bagaimana matplotlib disusun.
Matplotlib sengaja menghindari melakukan posisi kutu "statis", dll, kecuali jika secara eksplisit disuruh. Asumsinya adalah Anda akan ingin berinteraksi dengan plot, dan batas plot, ticks, ticklabels, dll akan berubah secara dinamis.
Karenanya, Anda tidak bisa hanya mengatur teks dari label centang yang diberikan. Secara default, ini diatur ulang oleh Locator dan Formatter sumbu setiap kali plot digambar.
Namun, jika Locators dan Formatters disetel menjadi statis (
FixedLocator
danFixedFormatter
, masing-masing), maka label centang tetap sama.Ini apa
set_*ticklabels
atauax.*axis.set_ticklabels
tidak.Mudah-mudahan itu membuatnya sedikit lebih jelas mengapa mengubah label centang individu agak berbelit-belit.
Seringkali, apa yang sebenarnya ingin Anda lakukan hanyalah menjelaskan posisi tertentu. Jika demikian, lihatlah ke dalam
annotate
.sumber
bold
sementara yang lain menggunakan fontweight "light". Apakah ada cara untuk melakukannya?fig.canvas.draw()
sangat pentingAnda juga dapat melakukan ini dengan pylab dan xticks
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
sumber
Dalam versi yang lebih baru
matplotlib
, jika Anda tidak mengatur label kutu dengan sekelompokstr
nilai, mereka secara''
default (dan ketika plot menggambar, label hanyalah nilai kutu). Mengetahui hal itu, untuk mendapatkan hasil yang diinginkan akan membutuhkan sesuatu seperti ini:dan hasilnya:
dan sekarang jika Anda memeriksa
_xticklabels
, mereka tidak lagi banyak''
.Ini berfungsi di versi dari
1.1.1rc1
ke versi saat ini2.0
.sumber
set_xticklabels
daftar campuran string dan objek centang.ax.get_xticks().tolist()
). Solusi yang paling banyak dipilih tidak (ax.get_xtickslabels()
). Entah bagaimana itu tidak dapat mengekstrak label sebelumplt.show()
dikeluarkan, meskipun saya menggunakanfig.canvas.draw()
seperti yang disarankan.Sudah lama sejak pertanyaan ini diajukan. Pada hari ini (
matplotlib 2.2.2
) dan setelah beberapa pembacaan dan uji coba, saya pikir cara terbaik / tepat adalah sebagai berikut:Matplotlib memiliki modul bernama
ticker
yang "berisi kelas untuk dukungan sepenuhnya dikonfigurasi locating kutu dan format" . Untuk memodifikasi tanda centang tertentu dari plot, berikut ini berfungsi untuk saya:Peringatan!
x
adalah nilai centang danpos
posisi relatifnya dalam urutan dalam sumbu. Perhatikan bahwapos
nilai mengambil mulai1
, tidak0
seperti biasa saat pengindeksan.Dalam kasus saya, saya mencoba memformat
y-axis
histogram dengan nilai persentase.mticker
memiliki kelas lain bernamaPercentFormatter
yang dapat melakukan ini dengan mudah tanpa perlu mendefinisikan fungsi terpisah seperti sebelumnya:Dalam hal ini
xmax
adalah nilai data yang sesuai dengan 100%. Persentase dihitung sebagaix / xmax * 100
, itu sebabnya kami perbaikixmax=1.0
. Juga,decimals
adalah jumlah tempat desimal untuk ditempatkan setelah titik.sumber
Kelas sumbu memiliki fungsi set_yticklabels yang memungkinkan Anda untuk mengatur label centang, seperti:
Saya masih memikirkan mengapa contoh Anda di atas tidak berhasil.
sumber
Ini bekerja:
sumber
Ini juga berfungsi di matplotlib 3:
sumber
Jika Anda tidak bekerja dengan
fig
danax
dan Anda ingin memodifikasi semua label (misalnya untuk normalisasi) Anda dapat melakukan ini:sumber
Coba ini :
sumber
Anda dapat melakukan:
sumber