Python 沿x轴在所需距离处绘制seaborn箱线图

Python 沿x轴在所需距离处绘制seaborn箱线图,python,pandas,seaborn,Python,Pandas,Seaborn,是否有必要沿x轴将seaborn箱线图放置在所需距离处 我有一个数据框 带索引分配的分层列索引,最大值,类型 学生姓名的行索引 +------------+----------+---------+----------+---------------+ |键入|作业|测验|作业|演示| ||最大100 |最大100 |最大100 |最大100| +------------+----------+---------+----------+---------------+ |作业| 1 | 2 |

是否有必要沿x轴将
seaborn
箱线图放置在所需距离处

我有一个数据框 带索引分配的分层列索引,最大值,类型 学生姓名的行索引

+------------+----------+---------+----------+---------------+
|键入|作业|测验|作业|演示|
||最大100 |最大100 |最大100 |最大100|
+------------+----------+---------+----------+---------------+
|作业| 1 | 2 | 3 | 4|
+------------+----------+---------+----------+---------------+
|学生1 | 88 | 98 | 100 | 85|
+------------+----------+---------+----------+---------------+
|学生2 | 96 | 79 | 100 | 97|
+------------+----------+---------+----------+---------------+
|学生3 | 87 | 79 | 72 | 78|
+------------+----------+---------+----------+---------------+
|学生4 | 87 | 84 | 90 | 85|
+------------+----------+---------+----------+---------------+
|学生5 | 73 | 91 | 76 | 90|
+------------+----------+---------+----------+---------------+
|学生6 | 70 | 75 | 98 | 82|
+------------+----------+---------+----------+---------------+
|学生7 | 85 | 71 | 73 | 75|
+------------+----------+---------+----------+---------------+
|学生8 | 76 | 81 | 94 | 86|
+------------+----------+---------+----------+---------------+
|学生9 | 97 | 80 | 95 | 88|
+------------+----------+---------+----------+---------------+
实际上,作业是字符串,更具描述性

我可以轻松地将数据帧输入seaborn,它将生成一个漂亮的方框图 sns.箱线图(df)

我真正想要的是把盒子分成不同的子地块(不难),但要按时间顺序适当地隔开

更清楚地说:

目前,
sns.boxplot(df)
按时间顺序放置所有的方框图,这很好。 例如,我想在上面画一个子图,它只有测验框图,但是测验框图在x轴上水平排列,如果包括所有作业,它们将落在哪里

是否仍有将seaborn箱线图沿x轴放置在所需距离处


sns.boxplot(df['quick',x=[1,5,9,12])
不起作用,因为您无法覆盖x'值(但这些只是标签)。

更新:似乎我错了,正如前面指出的,您可以通过巧妙地使用
顺序
关键字来指定位置,但您似乎需要将数据格式从“宽”改为“长”格式


简而言之,答案是否定的,
seaborn.boxplot
没有指定x轴上boxplot位置的选项

如果您不太喜欢样式,或者可以手动指定样式,则可以使用
pandas.DataFrame.boxplot
,它具有
positions
属性

import matplotlib.pyplot as plt
import pandas as pd
import numpy.random as rnd   # just to generate some data

data = pd.DataFrame(rnd.randn(10,4))
data.boxplot(positions=[1,5,6,10])
plt.grid('off')


这对于整数位置很酷,但对于浮动位置不实用。如何实现这一目标,有什么建议吗?
import numpy as np
import pandas as pd
import seaborn as sns
df = pd.DataFrame(dict(x=np.repeat([0, 3, 5, 6], 10),
                       y=np.random.randn(40)))
sns.boxplot(x="x", y="y", data=df, order=np.arange(7))