沿 x 轴所需距离处的 seaborn 箱线图
Posted
技术标签:
【中文标题】沿 x 轴所需距离处的 seaborn 箱线图【英文标题】:seaborn boxplots at desired distances along the x axis 【发布时间】:2016-05-07 12:52:55 【问题描述】:是否可以将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 |
+------------+----------+---------+----------+---------------+
实际上,Assignments 是字符串并且更具描述性。
我可以轻松地将数据框输入 seaborn,它会生成一个漂亮的箱线图 sns.boxplot(df)
我真正想要的是将框分隔到不同的子图上(不难),但要按时间顺序适当间隔。
更清楚:
目前sns.boxplot(df)
按时间顺序放置所有箱形图,这很好。
例如,我想要一个子图,它只有测验箱形图,但测验箱形图在 x 轴上水平排列,如果包括所有作业,它们会落在哪里。
是否有沿 x 轴在所需距离处放置 seaborn 箱线图?
sns.boxplot(df['Quiz'], x=[1,5,9,12])
不起作用,因为您无法覆盖 x“值”(但这些只是标签)。
【问题讨论】:
【参考方案1】:更新:看来,我错了,正如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')
【讨论】:
【参考方案2】: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))
【讨论】:
这对于整数位置很酷,但对于浮点位置不实用。有什么建议可以实现吗?以上是关于沿 x 轴所需距离处的 seaborn 箱线图的主要内容,如果未能解决你的问题,请参考以下文章
同一图上 Pandas 数据框多列的箱线图(seaborn)