我如何根据 seaborn 的值更改 barplot 中每个条形图的不透明度?

How can I change the opacity of my each bar in barplot by their values seaborn?

我有一个这样的数据框,其中我通过 seaborn 创建了条形图

sns.barplot(x='year', y='counts', data=df, color='red', alpha=df_alpha.alpha)
df.head()
    year    counts   alpha
0   2014    16908   1.000000
1   2015    14977   0.894269
2   2016    13626   0.820296
3   2013    12041   0.733510
4   2017    10980   0.675415

如何将 df 的 alpha 值设置为对应的 alpha 值? 我通过 MinMaxScaler 创建了 alpha 值列并缩放了 (0.1,1) 之间的计数 因此,最少计数栏的不透明度为 0.1,反之亦然。

要更改条形图的 alpha,您需要显式循环生成的条形图并更改它们的 alpha。为确保条形以与数据框中相同的顺序出现,应设置 order= 参数。

在下面的示例中,darkred 用于条形,以便更好地查看 alpha 的差异。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from io import StringIO

df_str = '''    year    counts   alpha
0   2014    16908   1.000000
1   2015    14977   0.894269
2   2016    13626   0.820296
3   2013    12041   0.733510
4   2017    10980   0.675415'''

df = pd.read_csv(StringIO(df_str), delim_whitespace=True)
ax = sns.barplot(x='year', y='counts', data=df, color='darkred', order=df['year'])
for bar, alpha in zip(ax.containers[0], df['alpha']):
    bar.set_alpha(alpha)
plt.show()