将箱线图排列为具有 seaborn 'FacetGrid' 的网格

我有一个包含三列的数据框。我想为每个网络设置一个框图,按轴的“特征”和 CV 折叠进行分组(参见示例图像)。Features, CV-fold, Accuracy, Network

http://img1.mukewang.com/62e8ef3f0001d23e06700438.jpg

df = pd.read_csv(path)

df['Features'] = df["Features"].astype('category')

ordered_features = sorted(df.Network.value_counts().index)


df = df.loc[df['Accuracy'] > 0.1]

df.Accuracy = df.Accuracy*100


#sns.color_palette("husl", len(df['CV-fold'].value_counts().index))

#sns.set_palette('husl', len(df['CV-fold'].value_counts().index))


g = sns.FacetGrid(df, row="Network", row_order=ordered_features,

                  height=3, aspect=3, legend_out=True, despine=False)

g.map(sns.boxplot, x="CV-fold", y="Accuracy", hue="Features", data=df, palette='muted').add_legend()


g.set_axis_labels("", "Accuracy (%)")

因为我有8个不同的网络,所以我不想将它们全部放在一列或一行中,而是格式化为网格(例如2x4)。此外,即使未启用,x 轴也仅在最底部的图形中标记。sharex


我该怎么做?



不负相思意
浏览 82回答 1
1回答

米脂

您可以使用关键字参数在具有多列的多行上获取绘图。col_wrap要重复 x 轴标签,请使用 。ax.tick_params()例:import seaborn as sns, matplotlib.pyplot as plttips = sns.load_dataset('tips')ordered_days = sorted(tips['day'].unique())g = sns.FacetGrid(tips,col='day',col_order=ordered_days,col_wrap=2)#                                               change this to 4 ^g.map(sns.boxplot,'sex','total_bill',palette='muted')for ax in g.axes.flatten():     ax.tick_params(labelbottom=True)plt.tight_layout()plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python