我有以下代碼
import numpy as np
import matplotlib.pyplot as plt
oct_data = [10, 24, 25, 30]
nov_data = [12, 42, 21, 78]
labels = ['Account_1', 'Account_2', 'Account_3', 'Account_4']
bar_width = 0.4
rect_1 = np.arange(0, len(oct_data)*2 ,2)
rect_2 = [x bar_width for x in rect_1]
plt.bar(rect_1, oct_data, color='#7f6d5f', width=bar_width, edgecolor='white', label='Month_1')
plt.bar(rect_2, nov_data, color='#557f2d', width=bar_width, edgecolor='white', label='Month_2')
plt.ylabel('Cost ($)', fontsize=10)
plt.legend()
plt.show()
這給了我下圖:

如您所見,我的xticks( Account_1, Account_2, ...) 未居中。據我了解,這個命令應該可以完成這項作業,但事實并非如此。
plt.xticks([r bar_width for r in range(0, len(oct_data)*2, 2)], labels)
我還想添加欄內高度的值。通常,這就是我使用“單條”圖的方式:
for i in range(len(labels)):
plt.text(i, oct_data[i]//2, oct_data[i], ha = 'center', color = 'black')
但這在這里不起作用。
任何幫助將不勝感激。我是 Matplotlib 的初學者。
uj5u.com熱心網友回復:
還有align,你可以使用選項:
# number of data points
num_data = len(labels)
bars1 = plt.bar(range(num_data), oct_data, color='#7f6d5f',
align='edge', width=-bar_width, # align and negative width for left bars
edgecolor='white', label='Month_1')
bars1 = plt.bar(range(num_data), nov_data, color='#557f2d',
align='edge', width=bar_width, # align and positive width for right bars
edgecolor='white', label='Month_2')
# set xticks
plt.xticks(range(num_data), labels)
對于注釋,建議有一個軸實體:
fig, ax = plt.subplots()
# other plot commands
for patch in ax.patches:
ax.text(patch.get_x() patch.get_width()/2,
patch.get_height()/2,
f'{patch.get_height()}',
verticalalignment='center', horizontalalignment='center')
輸出:

更新:所有代碼:
oct_data = [10, 24, 25, 30]
nov_data = [12, 42, 21, 78]
labels = ['Account_1', 'Account_2', 'Account_3', 'Account_4']
bar_width = 0.4
fig, ax = plt.subplots()
# number of data points
num_data = len(labels)
bars1 = plt.bar(range(num_data), oct_data, color='#7f6d5f',
align='edge', width=-bar_width, # align and negative width for left bars
edgecolor='white', label='Month_1')
bars1 = plt.bar(range(num_data), nov_data, color='#557f2d',
align='edge', width=bar_width, # align and positive width for right bars
edgecolor='white', label='Month_2')
for patch in ax.patches:
ax.text(patch.get_x() patch.get_width()/2,
patch.get_height()/2,
f'{patch.get_height()}',
verticalalignment='center', horizontalalignment='center')
# set xticks
plt.xticks(range(num_data), labels)
plt.ylabel('Cost ($)', fontsize=10)
plt.legend()
plt.show()
uj5u.com熱心網友回復:
- 最簡單的解決方案是使用熊貓。將資料放在一個便于進一步分析的物件中,繪圖 API 正確管理分組條的間距。
- 與 18 行相比,此實作僅使用 6 行代碼。
- 使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374529.html標籤:Python matplotlib 注释 条形图
