如何用boxplot绘制relplot,然后只绘制seaborn中指定的频率

问题描述 投票:1回答:1

我们有这样的数据:

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]})

enter image description here

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 )

enter image description here

它会明显地绘制而不考虑真实均值 - 这应该是val的总和除以每个sizetime的总和(为什么所有的点都具有相同的大小)

绘制relplot有助于绘制具有适当大小的点的大小,但如何绘制真正的boxplot:

ax = sns.relplot(x = 'time', y="val",  size="size",dashes = True,
            sizes=(40, 400), alpha=.5, palette="muted",
            height=6, data=df)

enter image description here

python python-3.x matplotlib plot seaborn
1个回答
1
投票

我没有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])  # <- 
© www.soinside.com 2019 - 2024. All rights reserved.