pandas:在bin中绘制平均值 - 需要格式化帮助

时间:2017-11-07 12:48:48

标签: python pandas matplotlib plot bins

我正在做一些太阳系动力学模拟,并且一直在使用这个项目作为借口教自己一些python / pandas。得到的数据集有超过1000条记录,其中包括每个相关机构的轨道倾角,偏心率等值。

我正在尝试使用熊猫来研究结果数据中~1000个物体(“测试粒子”)的平均轨道倾斜度,作为半长轴的函数。

到目前为止,我一直在做的是:

1)将数据读入数据帧

df = pd.read_csv('final.csv')

2)将数据限制在一个半长轴值范围内(粒子在模拟过程中展开,但我想限制我的分析

cf = df [df.a.between(30,80)]

3)绘制给定数量的箱的倾斜度的平均值

cf.groupby(pd.cut(cf.a,80))['inc']。mean()。plot()

这创建了一个可接受的绘图,但格式化方面它有几个问题:除非它完全最大化以填充我的屏幕,沿x轴的数字被挤压在一起并重叠。它们也不是我想要看到的:它们显示了垃圾箱的最大值和最小值,我希望直接滴答5秒或类似的东西。

pandas output from above command

我已经尝试将值(x = None,xticks = None)传递给上面字符串的plot()部分,但这对结果图没有影响。我可以按照我的方式进行绘图/输出控制吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

当我想做这样的事情时,我会直接去matplotlib。 我将用这个示例数据展示一个小例子:

df = pd.DataFrame([[1, 2], [2, 7], [3, 6], [4,7], [5,3]], columns=['A', 'B'])

我没有使用pd.cut剪切它,而是使用np.linspace剪切。 所以

bins = np.linspace(0,5,4)
group = df.groupby(pd.cut(df.A, bins))

现在,为了绘制它,我想要箱子的中间

plot_centers = (bins [:-1] + bins [1:])/2
plot_values = group.B.mean()

并用

绘图
plt.plot(plot_centers, plot_values)

您应该小心处理丢失的数据,即如果您有一个没有数据的bin。在这种情况下,您可以使用fillna(0)来使所有NaNs 0。

plot_values = group.B.mean().fillna(0)