pandas 在海运制作的条形图上写入自定义值[重复]

fv2wmkja  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(111)
    • 此问题已在此处有答案**:

How to annotate grouped bars with the value and text from a different column(1个答案)
How to make a multi-level chart column label by hue(1个答案)
How can I display custom values over grouped bars?(1个答案)
昨天关门了。
我想在我使用sns.barplot制作的条形图中的条形图上方写入自定义值。我的自定义值在另一列下的同一DataFrame中可用。这个问题已经回答了elsewhere但是,他们不考虑色调。当定义了Hue时,如何编写来自同一DataFrame的自定义值?
Dataframe :
| XData| YData|类型|标签|
| - -----|- -----|- -----|- -----|
| X型|一百二十三|A型|零零一|
| Y轴|二百三十四|A型|零一零|
| X型|三百四十五|B型|一百|
| Y轴|五百六十七|B型|千|
以下是我的情节:

MyBarPlot = sns.barplot(data=DataFrame, x="XData", y="YData",hue="Type",width=0.8, errorbar=('ci', 95))

DataFrameGrouped = DataFrame.groupby(['XData','YData']).label.mean()

for container in MyBarPlot .containers:
 MyBarPlot.bar_label(container[0], labels=DataFrameGrouped, padding=3, fmt='%.1f')
jm81lzqq

jm81lzqq1#

给定您共享的DataFrame和seaborn图,错误可能源于尝试直接使用DataFrameGrouped中的“label”,该属性未定义为分组对象的“label”属性。安排是这里的问题,因为它可以是一个大问题时,使用色调。

MyBarPlot = sns.barplot(data=df, x="XData", y="YData", hue="Type", width=0.8)
plt.ylim(0, df['YData'].max() + 100)  # This is to make sure there is enough space for labels above the bars

# Create a nested dictionary from the DataFrame for easy label access
label_dict = df.set_index(['XData', 'Type'])['Label'].to_dict()

for i, bar in enumerate(MyBarPlot.patches):
    # Calculate the label position
    height = bar.get_height()
    x = bar.get_x() + bar.get_width() / 2
    y = height

    # Get the corresponding label for this bar from label_dict
    label = label_dict[(df['XData'].unique()[i // 2], df['Type'].unique()[i % 2])]

    # Add the label to the bar
    plt.text(x, y, label, ha='center', va='bottom')

plt.show()

我已经附上了一份合作表的结果。https://colab.research.google.com/drive/1Ipt3FS5WkDjDc0uVm9RSgtgeI4uSFlUC?usp=sharing

相关问题