Saya memiliki sosok matplotlib yang saya plot data yang selalu disebut sebagai nanodetik (1e-9). Pada sumbu y, jika saya memiliki data yang berukuran puluhan nanodetik, yaitu. 44e-9, nilai pada sumbu ditampilkan sebagai 4.4 dengan + 1e-8 sebagai offset. Apakah ada cara untuk memaksa sumbu menampilkan 44 dengan offset + 1e-9?
Hal yang sama berlaku untuk sumbu x saya di mana sumbu menunjukkan + 5.54478e4, di mana saya lebih suka menampilkan offset +55447 (bilangan bulat, bukan desimal - nilainya di sini dalam hitungan hari).
Saya sudah mencoba beberapa hal seperti ini:
p = axes.plot(x,y)
p.ticklabel_format(style='plain')
untuk sumbu x, tetapi ini tidak berhasil, meskipun saya mungkin menggunakannya dengan tidak benar atau salah menafsirkan sesuatu dari dokumen, dapatkah seseorang mengarahkan saya ke arah yang benar?
Terima kasih, Jonathan
Saya mencoba melakukan sesuatu dengan pemformat tetapi belum menemukan solusi apa pun ...:
myyfmt = ScalarFormatter(useOffset=True)
myyfmt._set_offset(1e9)
axes.get_yaxis().set_major_formatter(myyfmt)
dan
myxfmt = ScalarFormatter(useOffset=True)
myxfmt.set_portlimits((-9,5))
axes.get_xaxis().set_major_formatter(myxfmt)
Di samping catatan, saya sebenarnya bingung di mana sebenarnya objek 'nomor offset' berada ... apakah itu bagian dari tanda centang mayor / minor?
sumber
set_units
? matplotlib.sourceforge.net/api/… (Saya tidak dapat mencobanya karena saya tidak memiliki matplotlib di sini.)rcParams
untuk mematikan secara default:rcParams["axes.formatter.useoffset"] = False
seperti di sini: stackoverflow.com/questions/24171064/…Jawaban:
Saya memiliki masalah yang persis sama, dan baris-baris berikut memperbaiki masalahnya:
sumber
ax.get_yaxis().get_major_formatter().set_useOffset(False)
from matplotlib.ticker import ScalarFormatter
untuk kode @Gonzalo untuk bekerja atau cukup gunakan solusi @Dataman di atasSolusi yang jauh lebih mudah adalah dengan menyesuaikan label centang. Ambil contoh ini:
Perhatikan bagaimana dalam kasus sumbu y, saya mengalikan nilai dengan
1e9
konstanta yang disebutkan di label yEDIT
Opsi lainnya adalah memalsukan pengganda eksponen dengan menambahkan teksnya secara manual ke bagian atas plot:
EDIT2
Anda juga dapat memformat nilai offset sumbu x dengan cara yang sama:
sumber
Anda harus membuat subkelas
ScalarFormatter
untuk melakukan apa yang Anda butuhkan ..._set_offset
cukup tambahkan konstanta, yang ingin Anda tetapkanScalarFormatter.orderOfMagnitude
. Sayangnya, pengaturan manualorderOfMagnitude
tidak akan melakukan apa-apa, karena disetel ulang ketikaScalarFormatter
instance dipanggil untuk memformat label centang sumbu. Seharusnya tidak serumit ini, tetapi saya tidak dapat menemukan cara yang lebih mudah untuk melakukan apa yang Anda inginkan ... Berikut contohnya:Yang menghasilkan sesuatu seperti:
Padahal, format default akan terlihat seperti:
Semoga itu bisa membantu sedikit!
Sunting: Untuk apa nilainya, saya juga tidak tahu di mana label offset berada ... Akan sedikit lebih mudah untuk mengaturnya secara manual, tapi saya tidak tahu bagaimana melakukannya ... Saya mengerti bahwa pasti ada cara yang lebih mudah dari semua ini. Itu berhasil!
sumber
Mirip dengan jawaban Amro, Anda dapat menggunakan FuncFormatter
sumber
Solusi Gonzalo mulai berfungsi untuk saya setelah menambahkan
set_scientific(False)
:sumber
Seperti yang telah ditunjukkan di komentar dan dalam jawaban ini , offset dapat dinonaktifkan secara global, dengan melakukan hal berikut:
sumber
Menurut saya cara yang lebih elegan adalah dengan menggunakan formatter ticker. Berikut adalah contoh untuk xaxis dan yaxis:
sumber
Untuk bagian kedua, tanpa mengatur ulang semua centang secara manual, inilah solusi saya:
jelas Anda dapat mengatur string format menjadi apa pun yang Anda inginkan.
sumber