手动将图例条目添加到Seaborn图例

这篇博客讨论了如何在Seaborn的分布图中添加垂直线并将其图例整合到现有图例中。作者通过示例代码展示了如何使用`axvline`添加垂直线,并通过获取图的艺术品(artists)来创建图例,确保图例正确显示。问题涉及到图例对齐和如何避免手动调整以实现自动化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我通过组成员身份创建覆盖分布图,使用

gfg = sns.displot(hist_dat, x="Outcome", hue="Group", kind="kde", fill = True,
                  palette="tab10", height=10.5, aspect=18.5/10.5, legend=True)
gfg._legend.set_title("Group")
plt.setp(gfg._legend.get_title(), fontsize=20) 

现在,我在绘图中添加一条垂直线,并想在图例中添加这条线的条目。我能找到的解决办法是

plt.axvline(x = 0, color = 'b', label = 'ATE')
plt.legend(bbox_to_anchor= (1.1,0.4), frameon=False, title="Effect", 
              title_fontsize=20)

要对齐图例,我必须手动调整它们。是否有更直接的方法添加ATE图例条目-例如在现有图例中?非常感谢!

Result:

我通过组成员身份创建覆盖分布图,使用

gfg = sns.displot(hist_dat, x="Outcome", hue="Group", kind="kde", fill = True,
                  palette="tab10", height=10.5, aspect=18.5/10.5, legend=True)
gfg._legend.set_title("Group")
plt.setp(gfg._legend.get_title(), fontsize=20) 

现在,我在绘图中添加一条垂直线,并想在图例中添加这条线的条目。我能找到的解决办法是

plt.axvline(x = 0, color = 'b', label = 'ATE')
plt.legend(bbox_to_anchor= (1.1,0.4), frameon=False, title="Effect", 
              title_fontsize=20)

要对齐图例,我必须手动调整它们。是否有更直接的方法添加ATE图例条目-例如在现有图例中?非常感谢!

Result:

 发布于 3 月前

回答

编辑:使用填充时,不会得到线条。我的错。稍微更改了代码。

为此,需要为图例参数指定句柄和标签。我发现获得PolyCollection艺术家的方法是使用ax.get_children()。然后,您调用plt.legend(handles, labels)。以下是一个玩具示例:

sns.displot([0, 1, 2, 2, 3, 3, 4, 4, 5], legend=True, kind='kde', label='test', fill=True)
children = plt.gca().get_children()
l = plt.axvline(3.5, c='r')
plt.legend([children[0], l], ['curve', 'line'] )

 发布于 3 月前

回答

编辑:使用填充时,不会得到线条。我的错。稍微更改了代码。

为此,需要为图例参数指定句柄和标签。我发现获得PolyCollection艺术家的方法是使用ax.get_children()。然后,您调用plt.legend(handles, labels)。以下是一个玩具示例:

sns.displot([0, 1, 2, 2, 3, 3, 4, 4, 5], legend=True, kind='kde', label='test', fill=True)
children = plt.gca().get_children()
l = plt.axvline(3.5, c='r')
plt.legend([children[0], l], ['curve', 'line'] )

https://www.5axxw.com/questions/content/6l4zfs

### 创建美观的柱形图配色方案 为了创建美观的柱形图,选择合适的配色方案至关重要。Seaborn 和 Matplotlib 提供了多种预定义的颜色调色板以及自定义选项来增强图形的表现力。 #### 使用 Seaborn 的预定义调色板 Seaborn 自带了几种不同的调色板,可以根据具体需求选用: - `deep`:适合大多数情况下的默认调色板。 - `muted`:色彩较为柔和,适用于需要突出数据而非颜色对比的情景。 - `pastel`:浅色调为主,给人温和的感觉。 - `bright`:鲜艳明亮的颜色组合。 - `dark`:深色系为主的调色板。 - `colorblind`:专门为色盲读者设计的颜色搭配[^2]。 可以通过如下代码应用这些调色板之一到柱状图上: ```python import seaborn as sns sns.set_palette("muted") # 更改为所需的调色板名称 ``` #### 定制化调色板 如果内置的选择无法满足特定的设计要求,则可以构建自己的调色板。这允许精确控制每根条目的颜色,甚至能实现渐变效果或其他复杂模式。下面是一段简单的例子说明如何创建并使用定制化的 RGB 或者十六进制颜色列表作为新的调色板: ```python custom_colors = ["#ff9999","#66b3ff","#99ff99","#ffcc99"] sns.set_palette(custom_colors) ``` 对于更加复杂的场景,还可以利用 matplotlib.colors.LinearSegmentedColormap 来生成连续变化的颜色映射表,并将其应用于图表之中。 #### 调整其他视觉属性 除了调整颜色外,适当调节透明度(alpha 值),边框宽度(line width), 图例位置等参数也可以显著改善最终呈现的效果。例如增加 alpha 参数可以让重叠部分变得清晰可见;而合理的 legend placement 则有助于提高整体布局美感。 最后值得注意的是,在实际操作过程中应当考虑目标受众的文化背景和个人偏好等因素的影响,确保所选配色既具有吸引力又不会引起误解或不适感。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值