我试图为3个 seaborn 绘图网格添加一个 colorbar。我可以将 colorbar 添加到3个单独的绘图中,或将一个颜色条挤在第三个绘图旁边。我希望在第三个绘图后有一个单独的颜色条,而不改变最后一个绘图的大小。
我从这个答案中获得了很多好的想法,但无法解决我的确切问题:SO问题/答案 这是我的当前代码:
我从这个答案中获得了很多好的想法,但无法解决我的确切问题:SO问题/答案 这是我的当前代码:
import seaborn as sns
def masked_vs_unmasked_facets(output_dir, merged_df, target_col, thresholds):
# defining the maximal values, to make the plot square
z_min = merged_df[['z_full', 'z_masked']].min(axis=0, skipna=True).min(skipna=True)
z_max = merged_df[['z_full', 'z_masked']].max(axis=0, skipna=True).max(skipna=True)
z_range_value = max(abs(z_min), abs(z_max))
# Setting the column values to create the facet grid
for i, val in enumerate(thresholds):
merged_df.loc[merged_df.info_score_masked > val, 'PlotSet'] = i
# Start the actual plots
g = sns.FacetGrid(merged_df, col='PlotSet', size=8)
def facet_scatter(x, y, c, **kwargs):
kwargs.pop("color")
plt.scatter(x, y, c=c, **kwargs)
# plt.colorbar() for multiple colourbars
vmin, vmax = 0, 1
norm=plt.Normalize(vmin=vmin, vmax=vmax)
g = (g.map(facet_scatter, 'z_full', 'z_masked', 'info_score_masked', norm=norm, cmap='viridis'))
ax = g.axes[0]
for ax in ax:
ax.set_xlim([-z_range_value * 1.1, z_range_value * 1.1])
ax.set_ylim([-z_range_value * 1.1, z_range_value * 1.1])
ax.plot(ax.get_xlim(), ax.get_ylim(), ls="--", c=".3")
plt.colorbar() # Single squashed colorbar
plt.show()
masked_vs_unmasked_facets(output_dir, masking_results, 'info_score_masked', [0, 0.7, 0.9])
subplots_adjust
。我会将其添加到我的答案中。 - geonaut