如何为Seaborn barplot添加不确定性误差棒?
给Seaborn Barplot添加不确定性误差棒的方法
嘿,其实你不用折腾单独调用matplotlib的errorbar啦,Seaborn的barplot本身就支持直接添加误差棒,当然如果你偏好errorbar的方式也没问题,我给你两种实用方案:
方案一:用Seaborn Barplot自带参数(最简便)
Seaborn的barplot有内置的yerr参数可以直接传入你的不确定性数据,还有capsize参数用来设置误差棒两端小帽子的长度,这样一步到位,不用额外操作。
修改你的代码如下:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 别忘了导入matplotlib的pyplot模块 df = pd.DataFrame( [ ['variable_a', 0.656536, 0.054560], ['variable_b', 0.425124, 0.056104], ['variable_c', 0.391201, 0.049393], ['variable_d', 0.331990, 0.032777], ['variable_e', 0.309588, 0.027449], ], columns = ['index', 'mean', 'statistical_uncertainty'] ) df.index = df['index'] del df['index'] # 直接传入yerr和capsize参数即可添加误差棒 p = sns.barplot(x=df["mean"], y=df.index, yerr=df["statistical_uncertainty"], capsize=5) plt.show()
这里yerr=df["statistical_uncertainty"]就是把你的不确定性数据作为误差值传入,capsize=5让误差棒两端有明显的小帽子,数据展示更清晰。
方案二:用Matplotlib的errorbar方法手动添加
如果你确实想使用matplotlib的errorbar功能,也可以手动实现:先画出Seaborn的barplot,然后获取每个条形的位置和高度,再调用errorbar来添加误差棒。
代码示例:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df = pd.DataFrame( [ ['variable_a', 0.656536, 0.054560], ['variable_b', 0.425124, 0.056104], ['variable_c', 0.391201, 0.049393], ['variable_d', 0.331990, 0.032777], ['variable_e', 0.309588, 0.027449], ], columns = ['index', 'mean', 'statistical_uncertainty'] ) df.index = df['index'] del df['index'] # 先绘制基础的barplot p = sns.barplot(x=df["mean"], y=df.index) # 获取每个条形的中心y坐标和对应的mean值 bars = p.patches y_positions = [bar.get_y() + bar.get_height()/2 for bar in bars] # 条形垂直方向的中心位置 x_means = [bar.get_width() for bar in bars] # 条形的宽度就是我们的mean数值 errors = df["statistical_uncertainty"].values # 调用errorbar添加误差棒 p.errorbar(x=x_means, y=y_positions, xerr=errors, fmt='none', c='black', capsize=5) plt.show()
解释一下:fmt='none'表示只画误差棒不添加额外标记点,c='black'设置误差棒颜色为黑色,和条形形成区分;capsize=5同样用来设置误差棒两端小帽子的长度。
内容的提问来源于stack exchange,提问作者BlandCorporation
相关产品推荐
相关产品推荐

