我有一个熊猫数据框,代表来自地区、主题和使用不同度量的几个不同时间序列的数据。pandas 数据透视表允许我轻松地透视数据的特定子集并绘制它。但是,我一生都无法弄清楚如何将误差线添加到情节中。由于旋转操作采用表格指定部分的平均值或值,因此我编写了一个小 labmda 函数来制作第二个表格,该表格与包含标准误差的第一个表格完全对齐。但是,我无法通过添加带有这些值的误差线来更新绘图。我相信我可以通过将表中的数据提取到向量中来解决问题,但这会破坏数据框的实用性。
样本数据:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# datafile
fileIN = 'model_data.txt'
# read in data
data = pd.read_table(fileIN, sep='\t')
此数据如下所示:
In [9]: data.head()
Out[9]:
subject drug group TR mask data measure
0 sub1S1 placebo h1 1 region1 0.33333 total_accuracy
1 sub1S1 placebo h1 1 region1 0.34615 facc
2 sub1S1 placebo h1 1 region1 0.42308 sacc
3 sub1S1 placebo h1 1 region1 0.23077 dacc
4 sub1S1 placebo h1 1 region1 -0.26923 fdist
# select just what we want to see
stage1 = data[data['measure'] == 'total_accuracy']
这个新框架如下所示:
In [19]: stage1.head()
Out[19]:
subject drug group TR mask data measure
0 sub1S1 placebo h1 1 region1 0.33333 total_accuracy
10 sub1S1 placebo h1 2 region1 0.39744 total_accuracy
20 sub1S1 placebo h1 3 region1 0.44872 total_accuracy
30 sub1S1 placebo h1 4 region1 0.48718 total_accuracy
40 sub1S1 placebo h1 5 region1 0.48718 total_accuracy
指示时间的 TR 正在按预期进行。现在,我对我现在不感兴趣的所有会话药物和组数据取平均值,但将区域数据保留为列并将时间保留在行中:
table = pd.pivot_table(stage1,values='data',rows=['TR'],cols=['mask'])
结果是 :
mask region1 region2 region3
TR
1 0.302465 0.226020 0.227680
2 0.353040 0.277540 0.329060
3 0.341645 0.340215 0.378680
4 0.354700 0.303180 0.377970
5 0.404085 0.333330 0.320985
6 0.353750 0.409310 0.308165
这很棒,因为现在当我这样做时
ax = table.plot()
并设置我想要的所有属性,然后执行 plt.show(),这正是我想要的。但是我需要得到这张图上的误差线。如果我做:
# lambda function to get standard error
ste = lambda x: np.std(x) / np.sqrt(len(x))
# get a table of the standard errors
ste_table = pd.pivot_table(stage1,values='data',rows=['TR'],cols=['mask'],aggfunc = ste)
然后我得到:
In [26]: ste_table
Out[26]:
mask region1 region2 region3
TR
1 0.021825 0.014771 0.047511
2 0.031396 0.030384 0.075547
3 0.075713 0.022327 0.049526
4 0.093678 0.048515 0.022832
5 0.058757 0.000000 0.008729
这是标准误的正确值。但我找不到用错误栏更新情节的方法。据我所知,我可以提取向量,然后使用 plt.errorbar 绘制它们,但我觉得应该有一种简单的方法来告诉 pandas 数据框这些是相关的错误,我希望它们出现在图上。任何帮助是极大的赞赏。(请原谅这篇文章的长度!我想彻底解释一下,我在这个论坛上完全是菜鸟。另外,堆栈溢出不允许我用错误栏、错误栏或栏来标记它)