在熊猫酒吧情节中带有黑色边框的白色错误栏

时间:2018-04-24 21:28:17

标签: python pandas matplotlib

我想知道是否可以实现错误条带为黑色边框的白色(在Pandas条形图中)?

我正在尝试实现这篇文章(Border on errorbars in matplotlib/python)中接受的答案中提到的内容,但是我想知道是否有可能为Pandas情节实现这一点?

相关的熊猫情节:

from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt

txt = u'''Category    COLUMN1         COLUMN2     COLUMN3    
A          0.5               3          Cat1   
B          0.3               5          Cat1 
C          0.7               4          Cat1
A          0.4               3          Cat2
B          0.8               5          Cat2
C          0.3               4          Cat2
'''

df = pd.read_table(StringIO(txt), sep="\s+")

order = ['Cat2', 'Cat1']
suborder = list("BAC")

df2 = pd.pivot_table(df,index='COLUMN3',columns='Category',values='COLUMN2').loc[order]
df2 = df2[suborder]
df2.plot(kind='bar', 
         yerr=pd.pivot_table(df,
                             index='COLUMN3',
                             columns='Category',values='COLUMN1')
                .reindex(df2.index)
                .reindex(df2.columns, axis=1), capsize=4)

1 个答案:

答案 0 :(得分:1)

您基本上可以使用与链接的答案中显示的相同的原则,稍微修改一下,因为您使用的是pandas而不是纯matplotlib。想法是相同的,绘制图形两次,并在第二次使用稍厚的错误栏并设置zorder更低,我们可以使用kwargs字典 - error_kw。此外,请确保传递ax=参数,以确保图形显示在同一图形上,并在第二个图上设置legend=False以避免重复图例条目。

fig, ax = plt.subplots()

df2.plot(kind='bar', 
         yerr=pd.pivot_table(df,
                             index='COLUMN3',
                             columns='Category',values='COLUMN1')
                .reindex(df2.index)
                .reindex(df2.columns, axis=1), ax=ax,
                error_kw=dict(ecolor='white', capthick=2,elinewidth=2,capsize=3,zorder=10))


df2.plot(kind='bar', 
         yerr=pd.pivot_table(df,
                             index='COLUMN3',
                             columns='Category',values='COLUMN1')
                .reindex(df2.index)
                .reindex(df2.columns, axis=1), ax=ax, legend=False,
                error_kw=dict(ecolor='black',capthick=4,elinewidth=4,capsize=4,zorder=5))

enter image description here