简体   繁体   English

对 Seaborn 和 Barplot 使用预先计算的误差线

[英]Use Precalculated Error Bars With Seaborn and Barplot

I have a dataframe where I have precomputed the average and the standard deviation for a particular set of values.我有一个 dataframe 我已经预先计算了一组特定值的平均值和标准偏差。 A snippet of the data frame and how to create it has been illustrated below:数据框的片段以及如何创建它如下所示:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

channel = ["Red", "Green", "Blue", "Red", "Green", "Blue", "Red", "Green", "Blue"]
average= [83.438681, 36.512924, 17.826646, 83.763724, 36.689707, 17.892932, 84.747069, 37.072383, 18.070416]
sd = [7.451285, 3.673155, 1.933273, 7.915111, 3.802536, 2.060639, 7.415741, 3.659094, 2.020355]
conc = ["0.00", "0.00", "0.00", "0.25", "0.25", "0.25", "0.50", "0.50", "0.50"]

df = pd.DataFrame({"channel": channel,
                  "average": average,
                  "sd" : sd,
                  "conc": conc})

order = ["0.00", "0.25", "0.50"]
sns.barplot(x="conc", y="average", hue="channel", data=df, ci=None, order=order);

Running the above code results in an image that looks like this:运行上面的代码会生成如下所示的图像:

在此处输入图像描述

I have a column sd that has the precalculated standard deviation and I would like to add error bars above and below each bar plotted.我有一列sd具有预先计算的标准偏差,我想在绘制的每个条形图的上方和下方添加误差线。 However I am unable to figure out how to do it.但是我无法弄清楚该怎么做。

Any help will be appreciated.任何帮助将不胜感激。

Ran into this error yesterday.昨天遇到这个错误。 In seaborn I believe you cannot add error bars based off pre-determined errors.在 seaborn 中,我相信您不能根据预先确定的错误添加错误栏。 Easiest solution is to graph matplotlib barplot over the seaborn one.最简单的解决方案是在 seaborn 上绘制 matplotlib 条形图。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

channel = ["Red", "Green", "Blue", "Red", "Green", "Blue", "Red", "Green", "Blue"]
average= [83.438681, 36.512924, 17.826646, 83.763724, 36.689707, 17.892932, 84.747069, 37.072383, 18.070416]
sd = [7.451285, 3.673155, 1.933273, 7.915111, 3.802536, 2.060639, 7.415741, 3.659094, 2.020355]
conc = ["0.00", "0.00", "0.00", "0.25", "0.25", "0.25", "0.50", "0.50", "0.50"]

df = pd.DataFrame({"channel": channel,
                  "average": average,
                  "sd" : sd,
                  "conc": conc})

order = ["0.00", "0.25", "0.50"]
sns.barplot(x="conc", y="average", hue="channel", data=df, ci=None, 
            order=order)


conc2=[0,0,0,1,1,1,2,2,2]
width = .25
add = [-1*width, 0 , width, -1*width, 0 , width, -1*width, 0 , width,]
x = np.array(conc2)+np.array(add)

plt.errorbar(x = x, y = df['average'],
            yerr=df['sd'], fmt='none', c= 'black', capsize = 2)
plt.show()

Kind of dumb but works!有点愚蠢但有效!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM