我正在做一些太阳系动力学模拟,并且一直在使用这个项目作为借口教自己一些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()部分,但这对结果图没有影响。我可以按照我的方式进行绘图/输出控制吗?
谢谢,
答案 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)