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'值'(但这些只是标签).
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)
更新:看来,我错了,正如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)
归档时间: |
|
查看次数: |
2930 次 |
最近记录: |