我有一个pandas Dataframe df
,它有四列:Candidate
、Sample_Set
、Values
和Error
。例如,Candidate
列具有三个唯一条目:[X, Y, Z]
并且我们有三个样本集,使得Sample_Set
也有三个唯一值:[1,2,3]
。df大致如下所示。
import pandas as pd
data = {'Candidate': ['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z'],
'Sample_Set': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'Values': [20, 10, 10, 200, 101, 99, 1999, 998, 1003],
'Error': [5, 2, 3, 30, 30, 30, 10, 10, 10]}
df = pd.DataFrame(data)
# display(df)
Candidate Sample_Set Values Error
0 X 1 20 5
1 Y 1 10 2
2 Z 1 10 3
3 X 2 200 30
4 Y 2 101 30
5 Z 2 99 30
6 X 3 1999 10
7 Y 3 998 10
8 Z 3 1003 10
我使用seaborn创建一个分组条形图,其中包含x="Candidate"
,y="Values"
,hue="Sample_Set"
。一切都很好,直到我尝试使用名为Error
的列下的值沿着y轴添加一个误差条。我使用以下代码。
import seaborn as sns
ax = sns.factorplot(x="Candidate", y="Values", hue="Sample_Set", data=df,
size=8, kind="bar")
我如何合并错误?
我希望能有一个解决办法或一个更优雅的方法来完成这项任务。
4条答案
按热度按时间hfwmuf9z1#
正如@ResMar在评论中指出的那样,seaborn中似乎没有内置的功能来轻松设置各个错误条。
如果你更关心结果而不是到达目的地的方式,下面的(不太优雅的)解决方案可能会有帮助,它构建在
matplotlib.pyplot.bar
上,seborn import只是用来获得相同的样式。注意通过简单地颠倒范畴和子范畴
你可以得到不同的分组:
mcvgt66p2#
pandas.DataFrame.plot
和kind='bar'
的bar-chartyerr
参数,该参数接受以下内容:DataFrame
或dict
,列名称与绘图DataFrame的columns
属性匹配或与Series的name
属性匹配。str
,指示绘图DataFrame
的哪些列包含误差值。list
、tuple
或np.ndarray
)。必须与绘图DataFrame
/Series
的长度相同。pandas.DataFrame.pivot
将 Dataframe 从长格式重新调整为宽格式来实现*在
python 3.8.12
、pandas 1.3.4
、matplotlib 3.4.3
中测试63lcw9qa3#
我建议从
patches
属性中提取位置坐标,然后绘制误差线。wr98u20j4#
使用Pandas绘图功能,您可以接近您所需要的:see this answer
这并不完全符合你的要求,但也很接近了。不幸的是,ggplot2 for python目前不能正确地呈现错误条。就我个人而言,在这种情况下,我会求助于R ggplot2: