Python:设置Seaborn线图错误带边缘颜色

时间:2018-10-30 00:07:27

标签: matplotlib seaborn

我正在使用Seaborn制作带有表示标准偏差的带的线图。类似于以下文档中的第二/第三情节: https://seaborn.pydata.org/generated/seaborn.lineplot.html?highlight=lineplot#seaborn.lineplot

我想知道是否可以单独设置误差带的边缘颜色?我可以通过err_kws更改乐队的线型。但是,如果我通过err_kws传递“ edgecolor”,似乎什么也没发生。有什么办法可以让我控制边缘吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

正如djakubosky所指出的,线的颜色和误差带在seaborn的lineplot中内部耦合在一起。我建议在情节生成后修改艺术家的属性会更清洁。这是比直接编辑库源代码(维护麻烦等)更简洁的选择。

对于sns.lineplot docs上显示的示例数据,我们可以如下更新误差带属性:

import seaborn as sns
fmri = sns.load_dataset("fmri")
ax = sns.lineplot(x="timepoint", y="signal", data=fmri)

# by inspection we see that the PolyCollection is the first artist
for child in ax.get_children():
    print(type(child))

# and so we can update its properties
ax.get_children()[0].set_color('k')
ax.get_children()[0].set_hatch('//')

polycollection properties modified

按演出者的属性进行选择可能比选择第一个演出者(尤其是如果您已经在相同的轴上进行渲染)更健壮。遵循以下原则:

from matplotlib.collections import PolyCollection
for child in ax.findobj(PolyCollection):
    child.set_color('k')
    child.set_hatch('//')

答案 1 :(得分:1)

在当前的Seaborn实现中,似乎实际上不可能更改此颜色。这是因为它们将主线的颜色作为ax.fillbetweenx(... color = original_color)明确传递给错误带。在过去玩耍之后,我发现此颜色arg似乎取代了其他颜色参数,例如facecolor和edgecolor,因此您在err_kws中输入的内容无关紧要。但是,您可以通过以下方式在site-packages / seaborn / relational.py中编辑第810行来解决此问题:

ax.fill_between(x, low, high, color=line_color, **err_kws)

ax.fill_between(x, low, high, **err_kws)

并通过err_kws显式传递颜色。