我從Matplotlib這一形象: 的Python/Matplotlib - 查找一組棒的最高值
我想(圖cat i with i in [1-10]
)寫爲每個類別的最高值和其對應的傳奇在圖表上。 下面你可以找到直觀我想實現什麼:
的東西是事實,我不知道這是否是可能的,因爲從matplotlib繪製的方式。
基本上,這是代碼的繪製多條部分:
# create plot
fig, ax = plt.subplots(figsize = (9,9))
index = np.arange(len_category)
if multiple:
bar_width = 0.3
else :
bar_width = 1.5
opacity = 1.0
#test_array contains test1 and test2
cmap = get_cmap(len(test_array))
for i in range(len(test_array)):
count = count + 1
current_label = test_array[i]
rects = plt.bar(index-0.2+bar_width*i, score_array[i], bar_width, alpha=opacity, color=np.random.rand(3,1),label=current_label)
plt.xlabel('Categories')
plt.ylabel('Scores')
plt.title('Scores by Categories')
plt.xticks(index + bar_width, categories_array)
plt.legend()
plt.tight_layout()
plt.show()
,這是我爲了做我想達到什麼樣的補充部分。但它會搜索圖形中所有條的最大值。例如,test1的最大值將在cat10中,而test2的最大值將是cat2。相反,我希望每個類別的最大值爲。
for i in range(len(test_array)):
count = count + 1
current_label = test_array[i]
rects = plt.bar(index-0.2+bar_width*i, score_array[i], bar_width,alpha=opacity,color=np.random.rand(3,1),label=current_label)
max_score_current = max(score_array[i])
list_rect = list()
max_height = 0
#The id of the rectangle who get the highest score
max_idx = 0
for idx,rect in enumerate(rects):
list_rect.append(rect)
height = rect.get_height()
if height > max_height:
max_height = height
max_idx = idx
highest_rect = list_rect[max_idx]
plt.text(highest_rect.get_x() + highest_rect.get_width()/2.0, max_height, str(test_array[i]),color='blue', fontweight='bold')
del list_rect[:]
你知道我該如何做到這一點嗎?
謝謝
看着你的解決方案,我終於明白OP的想要什麼...... –
@Thomas Yep,你是對的,這個問題並不完全清楚;我主要關注期望結果的「視覺」描述,而不是文本。 – ImportanceOfBeingErnest
完美!它以這種方式運作良好!我明白你的意思了!非常感謝你。 – lilouch