下面的代碼創建一個分類圖,其頂部有一個點圖,其中點圖顯示每個類別的平均值和 95% 置信區間。我需要將平均數據標簽添加到圖中,但我不知道該怎么做。僅供參考,每個類別都有數千個點,因此我不想標記每個數據點,而只想標記estimator=np.mean點圖中的值。這可能嗎??我在此處創建了一個示例數據集,以便您可以復制并粘貼代碼并自行運行。import pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltimport matplotlib.ticker as mtickimport numpy as npd = {'SurfaceVersion': ['v1', 'v1', 'v1', 'v2', 'v2', 'v2', 'v3', 'v3', 'v3'], 'Error%': [.01, .03, .15, .28, .39, .01, .01, .06, .09]}df_comb = pd.DataFrame(data=d)plotHeight = 10plotAspect = 2 #create catplot with jitter per surface version:ax = sns.catplot(data=df_comb, x='SurfaceVersion', y='Error%', jitter=True, legend=False, zorder=1, height=plotHeight, aspect=plotAspect)ax = sns.pointplot(data=df_comb, x='SurfaceVersion', y='Error%', estimator=np.mean, ci=95, capsize=.1, errwidth=1, hue='SurfaceVersion', color='k',zorder=2, height=plotHeight, aspect=plotAspect, join=False)ax.yaxis.set_major_formatter(mtick.PercentFormatter(xmax=1.0))plt.gca().legend().set_title('')plt.grid(color='grey', which='major', axis='y', linestyle='--')plt.xlabel('Surface Version')plt.ylabel('Error %')plt.subplots_adjust(top=0.95, left=.05)plt.suptitle('Error%')plt.legend([],[], frameon=False) #This is to get rid of the legend that pops up with the seaborn plot b/c it's buggy.plt.axhline(y=0, color='r', linestyle='--')plt.show()
1 回答

MYYA
TA貢獻1868條經驗 獲得超4個贊
您可以預先計算平均值并在循環中添加標簽。請記住,就定位而言,x 值實際上只是 0、1、2。
mean_df = df_comb.groupby("SurfaceVersion")[["Error%"]].mean()
for i, row in enumerate(mean_df.itertuples()):
x_value, mean = row
plt.annotate(
round(mean, 2), # label text
(i, mean), # (x, y)
textcoords="offset points",
xytext=(10, 0), # (x, y) offset amount
ha='left')
添加回答
舉報
0/150
提交
取消