আমি জানি এটি একটি পুরানো থ্রেড, তবে আমি গুগলের মাধ্যমে বেশ কয়েকবার এখানে অবতরণ করেছি এবং মনে করি কোনও প্রদত্ত উত্তর এখনও সন্তুষ্ট নয়। নিম্নলিখিত ফাংশনগুলির মধ্যে একটি ব্যবহার করার চেষ্টা করুন:
সম্পাদনা : যেহেতু আমি এই পুরানো থ্রেডটিতে কিছু পছন্দ পাচ্ছি, আমি একটি আপডেট সমাধানও ভাগ করে নিতে চাই (মূলত আমার আগের দুটি ফাংশন একসাথে রেখে স্বয়ংক্রিয়ভাবে সিদ্ধান্ত নিতে হবে এটি বার বা হবার প্লট কিনা):
def label_bars(ax, bars, text_format, **kwargs):
"""
Attaches a label on every bar of a regular or horizontal bar chart
"""
ys = [bar.get_y() for bar in bars]
y_is_constant = all(y == ys[0] for y in ys)
if y_is_constant:
_label_bar(ax, bars, text_format, **kwargs)
else:
_label_barh(ax, bars, text_format, **kwargs)
def _label_bar(ax, bars, text_format, **kwargs):
"""
Attach a text label to each bar displaying its y value
"""
max_y_value = ax.get_ylim()[1]
inside_distance = max_y_value * 0.05
outside_distance = max_y_value * 0.01
for bar in bars:
text = text_format.format(bar.get_height())
text_x = bar.get_x() + bar.get_width() / 2
is_inside = bar.get_height() >= max_y_value * 0.15
if is_inside:
color = "white"
text_y = bar.get_height() - inside_distance
else:
color = "black"
text_y = bar.get_height() + outside_distance
ax.text(text_x, text_y, text, ha='center', va='bottom', color=color, **kwargs)
def _label_barh(ax, bars, text_format, **kwargs):
"""
Attach a text label to each bar displaying its y value
Note: label always outside. otherwise it's too hard to control as numbers can be very long
"""
max_x_value = ax.get_xlim()[1]
distance = max_x_value * 0.0025
for bar in bars:
text = text_format.format(bar.get_width())
text_x = bar.get_width() + distance
text_y = bar.get_y() + bar.get_height() / 2
ax.text(text_x, text_y, text, va='center', **kwargs)
এখন আপনি এগুলি নিয়মিত বার প্লটের জন্য ব্যবহার করতে পারেন:
fig, ax = plt.subplots((5, 5))
bars = ax.bar(x_pos, values, width=0.5, align="center")
value_format = "{:.1%}"
label_bars(ax, bars, value_format)
বা অনুভূমিক বার প্লটের জন্য:
fig, ax = plt.subplots((5, 5))
horizontal_bars = ax.barh(y_pos, values, width=0.5, align="center")
value_format = "{:.1%}"
label_bars(ax, horizontal_bars, value_format)