沿x轴所需距离的seaborn箱线图

pef*_*ath 6 python pandas seaborn

无论如何将seaborn箱形图沿x轴放置在所需的距离?

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

+------------+----------+---------+----------+---------------+
| Type       | Homework | Quiz    | Homework | Presentations |
|            | max 100  | max 100 | max 100  | max 100       |
+------------+----------+---------+----------+---------------+
| Assignment | 1        | 2       | 3        | 4             |
+------------+----------+---------+----------+---------------+
| Student 1  | 88       | 98      | 100      | 85            |
+------------+----------+---------+----------+---------------+
| Student 2  | 96       | 79      | 100      | 97            |
+------------+----------+---------+----------+---------------+
| Student 3  | 87       | 79      | 72       | 78            |
+------------+----------+---------+----------+---------------+
| Student 4  | 87       | 84      | 90       | 85            |
+------------+----------+---------+----------+---------------+
| Student 5  | 73       | 91      | 76       | 90            |
+------------+----------+---------+----------+---------------+
| Student 6  | 70       | 75      | 98       | 82            |
+------------+----------+---------+----------+---------------+
| Student 7  | 85       | 71      | 73       | 75            |
+------------+----------+---------+----------+---------------+
| Student 8  | 76       | 81      | 94       | 86            |
+------------+----------+---------+----------+---------------+
| Student 9  | 97       | 80      | 95       | 88            |
+------------+----------+---------+----------+---------------+
Run Code Online (Sandbox Code Playgroud)

实际上,分配是字符串,更具描述性.

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

我真正喜欢的是将盒子分成不同的子图(不是硬的),而是按时间顺序间隔排列.

更清楚:

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

反正是否有沿着x轴在所需距离处放置海啸箱图

sns.boxplot(df['Quiz'], x=[1,5,9,12]) 不能正常工作,因为你无法覆盖x'值'(但这些只是标签).

mwa*_*kom 9

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这对于整数位置很酷,但对于浮点位置不实用。任何建议如何实现这一目标? (4认同)
  • 哇,太棒了; 用'宽'数据帧做任何事情? (2认同)

Ser*_*kiy 6

更新:看来,我错了,正如mwaskom指出的那样,您可以通过巧妙地使用order关键字来指定位置,但似乎您需要将数据从“宽”格式重新调整为“长”格式。


简短的回答是否定的seaborn.boxplot没有选项来指定箱线图沿 x 轴的位置。

如果你不太关心样式或者可以手动指定它,你可以使用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')
Run Code Online (Sandbox Code Playgroud)

带位置的箱线图