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

Bri*_*gan 1 alpha matplotlib bar-chart pandas

我有一个 DataFrame,其中包含几个统计模型的不同估计值和 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)})
Run Code Online (Sandbox Code Playgroud)

我可以通过转置和绘制为barh

df[['m4_params','m5_params','m6_params']].T.plot(kind='barh')
Run Code Online (Sandbox Code Playgroud)

但是,我还想通过使用一个简单的函数(如alpha = 1 - pvalue.

目标是使显着性较高的条形更强,而显着性较弱的条形更透明。据我所知,alpha关键字只接受浮点数,这意味着我需要某种方式来访问图中每个条的属性。

Gar*_*ett 5

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

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()
Run Code Online (Sandbox Code Playgroud)