如何向 seaborn 箱线图添加颜色条?

How to add a colorbar to seaborn boxplot?

我使用 seaborn.boxplot() 制作了箱线图。 x 轴的范围从 -0.95 到 0.95。因为 x 轴上的值很重要,所以我想创建一个与这些值匹配的颜色条。 使用 plt.colorbar(),我收到以下错误消息 'RuntimeError: No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf)'。 在 Whosebug 上搜索解决方案,我找到了 matplotlib colorbar not working (due to garbage collection?), Matplotlib: Creating Colorbar。 我试了一下,但我产生了更多错误,这表明我没有做正确的事。 因此,如果有人能帮助我并教我如何正确地做,我将不胜感激。预先感谢您抽出时间分享知识。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({'x_val':[
-0.95,
-0.95,
-0.95,
-0.95,
-0.9,
-0.9,
-0.9,
-0.9,
-0.85,
-0.85,
-0.85,
-0.85,
-0.8,
-0.8,
-0.8,
-0.8,
-0.75,
-0.75,
-0.75,
-0.75,
-0.7,
-0.7,
-0.7,
-0.7,
-0.65,
-0.65,
-0.65,
-0.65,
-0.6,
-0.6,
-0.6,
-0.6,
-0.55,
-0.55,
-0.55,
-0.55,
-0.5,
-0.5,
-0.5,
-0.5,
-0.45,
-0.45,
-0.45,
-0.45,
-0.4,
-0.4,
-0.4,
-0.4,
-0.35,
-0.35,
-0.35,
-0.35,
-0.3,
-0.3,
-0.25,
-0.25,
-0.25,
-0.2,
-0.2,
-0.2,
-0.15,
-0.15,
-0.15,
-0.1,
-0.1,
-0.1,
-0.1,
-0.05,
-0.05,
-0.05,
0.05,
0.05,
0.1,
0.1,
0.1,
0.15,
0.15,
0.2,
0.2,
0.2,
0.25,
0.25,
0.25,
0.3,
0.3,
0.3,
0.3,
0.35,
0.35,
0.35,
0.35,
0.4,
0.4,
0.4,
0.45,
0.45,
0.45,
0.45,
0.5,
0.5,
0.5,
0.5,
0.55,
0.55,
0.55,
0.55,
0.6,
0.6,
0.6,
0.6,
0.65,
0.65,
0.65,
0.65,
0.7,
0.7,
0.7,
0.7,
0.75,
0.75,
0.75,
0.75,
0.8,
0.8,
0.8,
0.8,
0.85,
0.85,
0.85,
0.85,
0.9,
0.9,
0.9,
0.9,
0.95,
0.95,
0.95,
0.95],
'y_val':[
0.97,
0.98,
0.96,
0.97,
0.94,
0.94,
0.96,
0.96,
0.93,
0.92,
0.92,
0.94,
0.92,
0.9,
0.93,
0.9,
0.91,
0.91,
0.88,
0.89,
0.86,
0.91,
0.87,
0.9,
0.88,
0.89,
0.85,
0.84,
0.86,
0.87,
0.82,
0.82,
0.84,
0.82,
0.8,
0.88,
0.77,
0.76,
0.84,
0.86,
0.83,
0.77,
0.82,
0.76,
0.81,
0.75,
0.8,
0.76,
0.81,
0.73,
0.72,
0.74,
0.73,
0.79,
0.7,
0.79,
0.73,
0.69,
0.7,
0.75,
0.7,
0.69,
0.74,
0.69,
0.69,
0.74,
0.68,
0.75,
0.69,
0.71,
0.73,
0.68,
0.7,
0.71,
0.76,
0.67,
0.76,
0.79,
0.75,
0.71,
0.7,
0.8,
0.74,
0.76,
0.73,
0.8,
0.71,
0.72,
0.79,
0.81,
0.71,
0.82,
0.74,
0.79,
0.8,
0.74,
0.77,
0.82,
0.8,
0.76,
0.84,
0.78,
0.83,
0.83,
0.85,
0.77,
0.8,
0.84,
0.88,
0.85,
0.81,
0.88,
0.85,
0.87,
0.87,
0.9,
0.84,
0.88,
0.91,
0.9,
0.86,
0.88,
0.92,
0.89,
0.91,
0.91,
0.92,
0.94,
0.92,
0.95,
0.96,
0.94,
0.95,
0.94,
0.97,
0.96,
0.97,
0.96]})

#plot
fig,ax = plt.subplots(figsize=(9,6))  
sns.boxplot(x='x_val',y='y_val',data=df,ax=ax,palette='YlGnBu')
plt.xticks(rotation=90)
#plt.colorbar()
plt.show()
plt.close()

您可以使用 cm.ScalarMappable

添加自定义颜色条
from matplotlib import cm, colors

norm = colors.Normalize(df.x_val.min(), df.x_val.max())
plt.xticks(rotation=90)
fig.colorbar(cm.ScalarMappable(norm=norm,cmap='YlGnBu'), ax=ax)

输出: