在 seaborn 点图中连接每个类别中的配对点

Posted

技术标签:

【中文标题】在 seaborn 点图中连接每个类别中的配对点【英文标题】:Join paired points within each category in seaborn pointplot 【发布时间】:2022-01-22 05:48:36 【问题描述】:

我有一些按类别分组的数据(即“a”、“b”、“c”等),我想在每对点之间画线每个类别。

基本上,每个类别都有一个“之前”和“之后”的值,所以我用色调来划分它。这是现在的情节,但最终我希望给定类别的每个“之前”和“之后”值都用一条线连接(即 a_before 连接到 a_after,b_before 连接到 b_after 等)。

sns.pointplot (x = ‘category’, y = ‘correlation’, 
    hue = ‘time’, linestyles = ‘’, dodge = .3, data = sample_data)

我将 linestyles 设置为 '' 因为否则它会连接所有点,而不仅仅是配对点。有没有办法用 seaborn 做到这一点?

谢谢!

编辑:我希望它看起来像这样:

(我将 linestyles 设置为 '' 因为否则它会连接所有点,而不仅仅是成对的点。)

【问题讨论】:

Seaborn 不知道配对。您至少需要告诉它哪些点与哪些点配对。这是相关的***.com/questions/70417004/… 您是否要在同一轴上创建两个图,一个连接所有“之前”点,另一个连接所有“之后”点?您是否尝试过运行基本的plot 两次? @YuliaV 不完全——我想加入类别中的每一对点(a、b、c 等),而不是加入所有之前和之后的点。我已经编辑了我刚刚手动绘制的我希望能够绘制的线条的帖子。谢谢!! 我觉得用 matplotlib 做起来更容易,但不确定sns.pointplot 对于每一对,您需要运行类似:plt.plot(x=[x_before, x_after], y=[y_before, y_after]) 有关plot 的更多信息,请参阅matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html 【参考方案1】:

Matplotlib 将生成的点存储到axlines 字段中。 sns.pointplot() 总是生成(可能是空的)置信区间,这些区间也会存储到行中。同样的位置也存储在ax.collections中。

您可以循环访问collections[0]collections[1] 以访问(躲避的)点的确切位置。然后,您可以在它们之间画线:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

sample_data = pd.DataFrame('category': ['a', 'a', 'b', 'b', 'c', 'c'],
                            'correlation': [0.33, 0.58, 0.51, 0.7, 0.49, 0.72],
                            'time': ['before', 'after', 'before', 'after', 'before', 'after'])
ax = sns.pointplot(x='category', y='correlation', hue='time', palette=['skyblue', 'dodgerblue'],
                   linestyles='', dodge=.3, data=sample_data)for (x0, y0), (x1, y1) in zip(ax.collections[0].get_offsets(), ax.collections[1].get_offsets()):
    ax.plot([x0, x1], [y0, y1], color='black', ls=':', zorder=0)
ax.axhline(0, color='black', ls='--')
ax.set_ylim(-1, 1)
plt.show()

【讨论】:

以上是关于在 seaborn 点图中连接每个类别中的配对点的主要内容,如果未能解决你的问题,请参考以下文章

在 seaborn 散点图中对分类 x 轴进行排序

如何在 seaborn 散点图中编辑多个图例框?

使用 seaborn 在 x y 散点图中添加标签

AttributeError:“str”对象在 Seaborn、散点图中没有属性“view”

更改 Seaborn 散点图中的图例位置和标签

在 ggplot 中为多个类别制作配对点