我们有这样的数据:
import pandas as pd
import seaborn as sns
data = np.array([[5.2, 500, 1], [7.2, 450, 1],[6.2, 350, 1],[4.6, 400,1 ],[5.9, 212,1], [6.2, 350, 2],[4.6, 400,2 ],[5.9, 212,2]])
df = pd.DataFrame({'val':data[:,0],'size':data[:,1], 'time':data[:,2]})
val
- 实际平均值,它是根据size
列中指定大小的数据集计算得出的
绘图箱图:
ax = sns.boxplot (x = 'time', y="val", data=df)
ax = sns.swarmplot(x = 'time', y="val", data=df, color=".25", size = df.size )
它会明显地绘制而不考虑真实均值 - 这应该是val
的总和除以每个size
的time
的总和(为什么所有的点都具有相同的大小)
绘制relplot
有助于绘制具有适当大小的点的大小,但如何绘制真正的boxplot:
ax = sns.relplot(x = 'time', y="val", size="size",dashes = True,
sizes=(40, 400), alpha=.5, palette="muted",
height=6, data=df)
我没有seaborn 0.9.0直接测试这个,但是从我读到的from the documentation sns.relplot()
返回一个FacetGrid
,而sns.boxplot
is an axes level function(意思是它将使用你选择的任何Axes实例)。这意味着你应该能够做到这样的事情:
g = sns.relplot(x = 'time', y="val", data=df, size="size")
ax = sns.boxplot (x = 'time', y="val", data=df, ax=g.axes[0,0]) # <-