Matplotlib 更改条形图中的alpha值以匹配变量

Matplotlib 更改条形图中的alpha值以匹配变量,matplotlib,pandas,bar-chart,alpha,Matplotlib,Pandas,Bar Chart,Alpha,我有一个数据框架,包含不同的估计值和几个统计模型的p值,作为列 df = pd.DataFrame({'m4_params':np.random.normal(size=3), 'm4_pvalues':np.random.random_sample(3), 'm5_params':np.random.normal(size=3), 'm5_pvalues':np.random.ra

我有一个数据框架,包含不同的估计值和几个统计模型的p值,作为列

df = pd.DataFrame({'m4_params':np.random.normal(size=3),
                   'm4_pvalues':np.random.random_sample(3),
                   'm5_params':np.random.normal(size=3),
                   'm5_pvalues':np.random.random_sample(3),
                   'm6_params':np.random.normal(size=3),
                   'm6_pvalues':np.random.random_sample(3)})
我可以将其转换为所需的条形图,并将其绘制为
barh

df[['m4_params','m5_params','m6_params']].T.plot(kind='barh')
但是,我也希望通过使用类似于
alpha=1-pvalue
的简单函数,根据每个条形图对应的pvalue更改其alpha通道来更新这些条形图


我们的目标是使具有更高水平重要性的条形图更为牢固,而那些具有较弱重要性的条形图更为透明。据我所知,
alpha
关键字只接受浮点数,这意味着我需要某种方法来访问绘图中每个条的属性。

这种方法可能很脆弱(使用pandas 0.11.0进行测试),但您可以在axes.patches上迭代 列表更可靠的方法是通过调用plt.barh()自己构建条形图。(旁注:非常小的alpha是不可见的,因此我将最小alpha设置为.2)


这种方法可能很脆弱(使用pandas 0.11.0进行测试),但您可以迭代axes.patches 列表更可靠的方法是通过调用plt.barh()自己构建条形图。(旁注:非常小的alpha是不可见的,因此我将最小alpha设置为.2)


对我来说是0.13!非常感谢。对我来说是0.13!非常感谢。
from itertools import product

ax = df[['m4_params','m5_params','m6_params']].T.plot(kind='barh')
for i, (j, k) in enumerate(product(range(3), range(3))):
    patch = ax.patches[i]
    alpha = 1 - df[['m4_pvalues','m5_pvalues','m6_pvalues']].T.iloc[j, k]
    patch.set_alpha(max(alpha, .2))
plt.draw()