Saya membuat plot batang, bagaimana cara menampilkan nilai batang pada setiap batang?
Plot saat ini:
Apa yang saya coba dapatkan:
Kode saya:
import os
import numpy as np
import matplotlib.pyplot as plt
x = [u'INFO', u'CUISINE', u'TYPE_OF_PLACE', u'DRINK', u'PLACE', u'MEAL_TIME', u'DISH', u'NEIGHBOURHOOD']
y = [160, 167, 137, 18, 120, 36, 155, 130]
fig, ax = plt.subplots()
width = 0.75 # the width of the bars
ind = np.arange(len(y)) # the x locations for the groups
ax.barh(ind, y, width, color="blue")
ax.set_yticks(ind+width/2)
ax.set_yticklabels(x, minor=False)
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
#plt.show()
plt.savefig(os.path.join('test.png'), dpi=300, format='png', bbox_inches='tight') # use format='svg' or 'pdf' for vectorial pictures
python
matplotlib
bar-chart
Franck Dernoncourt
sumber
sumber
plt.text(v, i, " "+str(v), color='blue', va='center', fontweight='bold')
plt.show()
klausa di bagian akhir. Misalnya:df.plot(); plt.show()
Saya perhatikan kode contoh api berisi contoh barchart dengan nilai bar yang ditampilkan di setiap bar:
keluaran:
FYI Berapa satuan variabel tinggi dalam "barh" dari matplotlib? (hingga saat ini, tidak ada cara mudah untuk mengatur ketinggian tetap untuk setiap batang)
sumber
Bagi siapa pun yang ingin memiliki label di dasar batang, cukup bagi v dengan nilai label seperti ini:
(catatan: Saya menambahkan 100 jadi tidak mutlak di bagian bawah)
Untuk mendapatkan hasil seperti ini:
sumber
v == labels[i]
dan baris ketiga dan keempat bisa begitu saja101, v
?Saya tahu ini utas lama, tetapi saya mendarat di sini beberapa kali melalui Google dan berpikir belum ada jawaban yang benar-benar memuaskan. Coba gunakan salah satu fungsi berikut:
EDIT : Karena saya mendapatkan beberapa suka di utas lama ini, saya ingin membagikan solusi yang diperbarui juga (pada dasarnya menggabungkan dua fungsi saya sebelumnya dan secara otomatis memutuskan apakah itu plot bar atau hbar):
Sekarang Anda dapat menggunakannya untuk plot batang biasa:
atau untuk plot batang horizontal:
sumber
Gunakan plt.text () untuk meletakkan teks di plot.
Contoh:
Ini akan menunjukkan gambar sebagai:
diagram batang dengan nilai di atas
sumber
plt.text(x=index , y =data+1 , s=f"{data}" , fontdict=dict(fontsize=20), va='center')
Untuk orang panda:
Itu dia. Alternatifnya, bagi mereka yang lebih suka melakukan
apply
perulangan dengan enumerate:Juga,
ax.patches
akan memberi Anda bar yang akan Anda dapatkanax.bar(...)
. Jika Anda ingin menerapkan fungsi @SaturnFromTitan atau teknik orang lain.sumber
[ax.text(i, v, '{:.2f}%'.format(100*v)) for i, v in enumerate(s)];
for p in ax.patches: ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))
Saya membutuhkan label batang juga, perhatikan bahwa sumbu y saya memiliki tampilan yang diperbesar menggunakan batas pada sumbu y. Penghitungan default untuk meletakkan label di atas bilah masih berfungsi menggunakan ketinggian (use_global_coordinate = False dalam contoh). Tetapi saya ingin menunjukkan bahwa label juga dapat diletakkan di bagian bawah grafik dalam tampilan yang diperbesar menggunakan koordinat global di matplotlib 3.0.2 . Semoga membantu seseorang.
sumber
Saya mencoba melakukan ini dengan batang plot bertumpuk. Kode yang berhasil untuk saya adalah.
sumber
Periksa link ini Galeri Matplotlib Ini adalah bagaimana saya menggunakan potongan kode autolabel.
sumber