Saya mencoba memperbaiki bagaimana python memplot data saya.
Mengatakan
x = [0,5,9,10,15]
dan
y = [0,1,2,3,4]
Maka saya akan melakukan:
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
dan tanda centang sumbu x diplot dalam interval 5. Apakah ada cara untuk membuatnya menunjukkan interval 1?
python
matplotlib
Dax Feliz
sumber
sumber
pyplot.locator_params(nbins=4)
Jawaban:
Anda dapat secara eksplisit mengatur di mana Anda ingin menandai tanda dengan
plt.xticks
:Sebagai contoh,
(
np.arange
Digunakan daripadarange
fungsi Python untuk berjaga-jagamin(x)
danmax(x)
mengapung bukan ints.)Fungsi
plt.plot
(atauax.plot
) akan secara otomatis menetapkan standarx
dany
batas. Jika Anda ingin mempertahankan batas-batas itu, dan hanya mengubah ukuran langkah dari tanda centang, maka Anda dapat menggunakanax.get_xlim()
untuk menemukan batas apa yang telah ditetapkan oleh Matplotlib.Formatter tick default harus melakukan pekerjaan yang layak membulatkan nilai tick ke sejumlah digit signifikan yang masuk akal. Namun, jika Anda ingin memiliki kontrol lebih besar atas format, Anda dapat menentukan formatter Anda sendiri. Sebagai contoh,
Berikut ini adalah contoh runnable:
sumber
+1
inplt.xticks(np.arange(min(x), max(x)+1, 1.0))
diperlukan untuk menunjukkan tanda centang terakhir.np.arange(start, stop)
menghasilkan nilai dalam interval setengah terbuka[start, stop)
, termasukstart
tetapi tidak termasukstop
. Jadi saya biasamax(x)+1
memastikanmax(x)
sudah termasuk.plt.xticks(np.arange(min(dates), max(dates)+0.1,0.1)
? tampaknya hanya merencanakan tahunPendekatan lain adalah mengatur locator sumbu:
Ada beberapa jenis locator tergantung pada kebutuhan Anda.
Ini adalah contoh lengkapnya:
sumber
matplotlib.dates.AutoDateLocator()
base=1.0
sebenarnya berarti / lakukan?Saya suka solusi ini (dari Cookbook Matplotlib Plotting ):
Solusi ini memberi Anda kontrol eksplisit terhadap jarak kutu melalui angka yang diberikan
ticker.MultipleLocater()
, memungkinkan penentuan batas otomatis, dan mudah dibaca nanti.sumber
Jika ada orang yang tertarik pada satu-liner umum, cukup dapatkan kutu saat ini dan gunakan untuk mengatur kutu baru dengan mengambil sampel setiap kutu lainnya.
sumber
ax.set_xticks([tick for tick in ax.get_xticks() if tick % 1 == 0])
Ini agak hacky, tetapi sejauh ini terbersih / termudah untuk memahami contoh yang saya temukan untuk melakukan ini. Ini dari jawaban pada SO di sini:
Cara terbersih untuk menyembunyikan setiap label centang ke-n di matplotlib colorbar?
Kemudian Anda dapat mengulang label pengaturan ke terlihat atau tidak tergantung pada kepadatan yang Anda inginkan.
sunting: perhatikan bahwa kadang-kadang matplotlib menetapkan label ==
''
, sehingga mungkin terlihat seperti label tidak ada, padahal sebenarnya itu dan tidak menampilkan apa-apa. Untuk memastikan Anda mengulang-ulang label yang terlihat, Anda dapat mencoba:sumber
ax.get_xticklabels()[1::2]
label disembunyikan.''
sehingga ketika Anda mengulanginya, Anda membuat xticklabels yang kosong tidak terlihat (yang tidak akan berpengaruh pada visualisasi, tetapi mungkin berarti Anda tidak menarik label yang benar). Anda dapat mencoba:vis_labels = [label for label in ax.get_xticklabels() if label.get_visible() is True]; plt.setp(vis_labels[::2], visible==False)
Ini adalah topik lama, tapi saya sering tersandung dan membuat fungsi ini. Sangat nyaman:
Satu peringatan untuk mengendalikan kutu seperti ini adalah bahwa seseorang tidak lagi menikmati pemutakhiran automagic interaktif skala max setelah penambahan baris. Lalu lakukan
dan jalankan kembali fungsi resadjust.
sumber
Saya mengembangkan solusi yang tidak bagus. Pertimbangkan bahwa kita memiliki sumbu X dan juga daftar label untuk setiap titik di X.
Contoh: Katakanlah saya ingin menunjukkan label kutu hanya untuk 'feb' dan 'jun' Bagus, sekarang kami memiliki daftar label palsu. Pertama, kami merencanakan versi aslinya. Sekarang, versi yang dimodifikasi.sumber
jika Anda hanya ingin mengatur spasi satu liner sederhana dengan boilerplate minimal:
juga bekerja dengan mudah untuk kutu minor:
sedikit suap, tapi cukup kompak
sumber
Ini berhasil untuk saya
jika Anda ingin kutu di antara [1,5] (1 dan 5 inklusif) maka gantilah
sumber
xmarks = range(1, length+1, 1)
. cukup yakin pemahaman daftar itu berlebihan.Implementasi Python Murni
Di bawah ini adalah implementasi python murni dari fungsionalitas yang diinginkan yang menangani setiap seri numerik (int atau float) dengan nilai-nilai positif, negatif, atau campuran dan memungkinkan pengguna untuk menentukan ukuran langkah yang diinginkan:
Output Sampel
Contoh Penggunaan
Perhatikan bahwa sumbu x memiliki nilai integer yang semuanya berjarak sama rata dengan 5, sedangkan sumbu y memiliki interval yang berbeda (
matplotlib
perilaku default, karena kutu tidak ditentukan).sumber