带有连接 python 中数据点的线的箱线图

A boxplot with lines connecting data points in python

我正在尝试根据与点相关联的特定关系连接线。在这个例子中,线条将连接球员,他们在哪个球场打球。我可以创建基本结构,但还没有想出一个相当简单的方法来创建这个附加功能。

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

df_dict={'court':[1,1,2,2,3,3,4,4],
         'player':['Bob','Ian','Bob','Ian','Bob','Ian','Ian','Bob'],
         'score':[6,8,12,15,8,16,11,13],
         'win':['no','yes','no','yes','no','yes','no','yes']}

df=pd.DataFrame.from_dict(df_dict)

ax = sns.boxplot(x='score',y='player',data=df)
ax = sns.swarmplot(x='score',y='player',hue='win',data=df,s=10,palette=['red','green'])
plt.show()

这段代码生成了下面的图减去了我想要的灰线。

将球员姓名转换为整数作为标志,作为y-axis的值,对场上每个位置进行循环处理,画一条线

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

df_dict={'court':[1,1,2,2,3,3,4,4],
         'player':['Bob','Ian','Bob','Ian','Bob','Ian','Ian','Bob'],
         'score':[6,8,12,15,8,16,11,13],
         'win':['no','yes','no','yes','no','yes','no','yes']}

df=pd.DataFrame.from_dict(df_dict)

ax = sns.boxplot(x='score',y='player',data=df)
ax = sns.swarmplot(x='score',y='player',hue='win',data=df,s=10,palette=['red','green'])

df['flg'] = df['player'].apply(lambda x: 0 if x == 'Bob' else 1)
for i in df.court.unique():
    dfq = df.query('court == @i').reset_index()
    ax.plot(dfq['score'], dfq['flg'], 'g-')
plt.show()

您可以在此处使用 lineplot

sns.lineplot(
    data=df, x="score", y="player", units="court",
    color=".7", estimator=None
)