Saya memiliki plot yang dibuat dengan panda seperti ini:
df['myvar'].plot(kind='bar')
Sumbu y adalah format sebagai float dan saya ingin mengubah sumbu y menjadi persentase. Semua solusi yang saya temukan menggunakan sintaks ax.xyz dan saya hanya dapat menempatkan kode di bawah baris di atas yang membuat plot (saya tidak dapat menambahkan ax = ax ke baris di atas.)
Bagaimana cara memformat sumbu y sebagai persentase tanpa mengubah garis di atas?
Berikut adalah solusi yang saya temukan tetapi mengharuskan saya mendefinisikan ulang plot :
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mtick
data = [8,12,15,17,18,18.5]
perc = np.linspace(0,100,len(data))
fig = plt.figure(1, (7,4))
ax = fig.add_subplot(1,1,1)
ax.plot(perc, data)
fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
xticks = mtick.FormatStrFormatter(fmt)
ax.xaxis.set_major_formatter(xticks)
plt.show()
Tautkan ke solusi di atas: Pyplot: menggunakan persentase pada sumbu x
python
pandas
matplotlib
plot
Chris
sumber
sumber
Jawaban:
Ini terlambat beberapa bulan, tetapi saya telah membuat PR # 6251 dengan matplotlib untuk menambahkan
PercentFormatter
kelas baru . Dengan kelas ini Anda hanya perlu satu baris untuk memformat ulang sumbu Anda (dua jika Anda menghitung impormatplotlib.ticker
):PercentFormatter()
menerima tiga argumen,xmax
,decimals
,symbol
.xmax
memungkinkan Anda untuk mengatur nilai yang sesuai dengan 100% pada sumbu. Ini bagus jika Anda memiliki data dari 0,0 hingga 1,0 dan Anda ingin menampilkannya dari 0% hingga 100%. Lakukan sajaPercentFormatter(1.0)
.Dua parameter lainnya memungkinkan Anda untuk mengatur jumlah digit setelah koma desimal dan simbol. Mereka default ke
None
dan'%'
, masing-masing.decimals=None
akan secara otomatis mengatur jumlah titik desimal berdasarkan seberapa banyak sumbu yang Anda tunjukkan.Memperbarui
PercentFormatter
diperkenalkan ke Matplotlib tepat di versi 2.1.0.sumber
from matplotlib.ticker import mtick
dan mengasumsikanmtick
"modul" telah dihapus.pandas dataframe plot akan mengembalikan
ax
untuk Anda, Dan kemudian Anda dapat mulai memanipulasi sumbu apa pun yang Anda inginkan.sumber
matplotlib.ticker
pemformat fungsi!Solusi Jianxun berhasil untuk saya tetapi merusak indikator nilai y di kiri bawah jendela.
Saya akhirnya menggunakan
FuncFormatter
sebagai gantinya (dan juga menghapus nol tertinggal yang tidak perlu seperti yang disarankan di sini ):Secara umum saya akan merekomendasikan penggunaan
FuncFormatter
untuk pemformatan label: dapat diandalkan, dan serbaguna.sumber
ax.yaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format))
. AKA tidak perlu lambda, biarkan format melakukan pekerjaannya.'{0:.0%}'.format
membuat fungsi pemformatan . The0
sebelum usus besar memberitahu formatter untuk menggantikan keriting kurung dan isinya dengan argumen pertama dilewatkan ke fungsi. Bagian setelah titik dua.0%
,, memberi tahu pemformat cara merender nilai. The.0
menentukan 0 tempat desimal dan%
menspesifikasikan render sebagai persen.Bagi mereka yang mencari one-liner cepat:
Atau jika Anda menggunakan Latex sebagai pemformat teks sumbu, Anda harus menambahkan satu garis miring terbalik '\'
sumber
Saya mengusulkan metode alternatif menggunakan
seaborn
Kode kerja:
sumber
Saya terlambat ke permainan tetapi saya baru menyadari ini:
ax
dapat diganti denganplt.gca()
bagi mereka yang tidak menggunakan sumbu dan hanya subplot.Menggema jawaban Fisikawan @Mad, menggunakan paket
PercentFormatter
itu akan menjadi:sumber