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