python - Seaborn条形图中的误差条颜色与色调
问题描述
我绘制seaborn.barplot
了hue
几个类别。
我希望错误栏与栏本身具有相同的颜色线 - 我该怎么做?
我用这样的数据框来称呼它,我有四个房屋类别:
sns.barplot(y = '$T_i$', x = 'algo', hue = 'pricing', data = df, alpha = 0.0, ci = 100, capsize = 0.1)
我errcolor = 'black'
在 kwargs 中找到了,但它改变了所有酒吧,不管色调如何。
解决方案
这是一种令人不快的方法,但似乎有效。您可以访问条形图 ( ax.patches[x].get_facecolor()
) 中矩形的颜色,并使用这些颜色为误差线 ( ) 分配新颜色ax.get_lines()[x].set_color()
。这是使用示例的seaborn
示例:
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.barplot(x="day", y="total_bill", data=tips,)
patches = ax.patches
lines_per_err = 3
for i, line in enumerate(ax.get_lines()):
newcolor = patches[i // lines_per_err].get_facecolor()
line.set_color(newcolor)
结果图:
这个解决方案有几个问题:
- 您必须使用这些不太友好
get
的set
命令matplotlib
- 有一个假设,
ax.patches
并且ax.get_lines()
正在以一致的顺序返回,比如从左到右(或多或少)。请注意,我的图中实际上有 12 个线对象(4 *(误差条 + 底盖 + 顶盖)),并且只有 4 个图形条。请注意这一点,因为您的图表有更多条形(即我不确定这个假设是否成立)。您可以尝试通过对对象应用排序来更明确(如sorted(ax.patches, key=lambda x: x.get_x()
和sorted(ax.get_lines(), key=lambda x:x.get_xdata()[0])
)。 - 如果绘图中有其他线或矩形几何图形,您可能不希望以它们为目标。因此,您可能必须在创建条形图和误差线之后,但在其他事情之前运行它。
seaborn
对于某些在一个函数调用中绘制大量内容的绘图,这可能是不可能的。 - 显然这比某种
errcolor
参数更麻烦,但我没有从情节调用中看到这样做的选项。但在紧要关头,上述内容可能就足够了。
编辑:我将线条链接到补丁的原始逻辑不正确。如上所示,您可以使用i // lines_per_error
将误差线连接到图表栏。这lines_per_error
是绘制每个误差线的行数。由于我认为它应该只有 1 或 3,具体取决于您是否使用错误栏上限,您可以执行以下操作:
capsize = None
ax = sns.barplot(..., capsize=capsize)
lines_per_err = 1 if capsize is None else 3
此外,这是一个使用 a 的示例hue
:
import seaborn as sns
capsize = .1
tips = sns.load_dataset("tips")
ax = sns.barplot(x="day", y="total_bill", hue="sex", data=tips, capsize=capsize)
patches = ax.patches
lines_per_err = 1 if capsize is None else 3
for i, line in enumerate(ax.get_lines()):
newcolor = patches[i // lines_per_err].get_facecolor()
line.set_color(newcolor)
推荐阅读
- vue.js - 如何在 VueJS2 中使用 Bootstrap 5 手风琴组件?
- vue.js - 将带有变量和类的scss文件全局导入Vue应用程序?
- ansible - 为分子测试的单体存储库中的 Ansible 角色指定自定义模块路径
- ios - 如何将预构建的 iOS 胖框架发布为 CocoaPod 包
- php - Symfony 的 make:entity 命令创建的 ManyToMany 关系之间的握手
- kotlin - 蓝牙 LE OTS OLCP 计数对象命令
- python - 如何通过索引/列/行获取代表画家中单元格的坐标?
- swift - SwiftUI - TabView 多次显示视图
- xml - SVG 文件:删除每个
带有 vim 的对象和内容 - postgresql - 是否可以使用 pg-promise QueryFile 提供查询名称?