Matplotlib 更改条形图中的alpha值以匹配变量
我有一个数据框架,包含不同的估计值和几个统计模型的p值,作为列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
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()