Gle*_*ker 2 python plot matplotlib bins pandas
我正在做一些太阳系动力学模拟,并一直以这个项目为借口自学一些 python/pandas。生成的数据集有 1000 多条记录,其中包含每个相关天体的轨道倾角、偏心率等值。
我正在尝试使用熊猫来研究结果数据中 ~1000 个物体(“测试粒子”)的平均轨道倾角,作为半长轴的函数。
到目前为止,我一直在做的是:
1) 将数据读入数据帧
df = pd.read_csv('final.csv')
Run Code Online (Sandbox Code Playgroud)
2) 将数据限制在一系列半长轴值(粒子在模拟过程中“扩散”,但我想限制我的分析
cf = df[df.a.between(30,80)]
Run Code Online (Sandbox Code Playgroud)
3) 绘制给定数量的 bin 的倾角平均值
cf.groupby(pd.cut(cf.a, 80))['inc'].mean().plot()
Run Code Online (Sandbox Code Playgroud)
这创建了一个可接受的绘图,但在格式方面它有几个问题:除非它完全最大化以填满我的屏幕,否则沿 x 轴的数字会被挤压在一起并重叠。它们也不完全是我想看到的:它们显示了垃圾箱的最大值和最小值,我更喜欢直接滴答 5 秒或类似的东西。
我试过将值传递(x=None, xticks=None)给plot()上面的字符串部分,但这对结果图没有影响。我这样做的方式是否可以控制绘图/输出?
谢谢,
G
当我想做这样的事情时,我直接去matplotlib。我将用这个示例数据展示一个小例子:
df = pd.DataFrame([[1, 2], [2, 7], [3, 6], [4,7], [5,3]], columns=['A', 'B'])
Run Code Online (Sandbox Code Playgroud)
相反,用切割它pd.cut,我就与削减np.linspace。所以
bins = np.linspace(0,5,4)
group = df.groupby(pd.cut(df.A, bins))
Run Code Online (Sandbox Code Playgroud)
现在,为了绘制它,我想要垃圾箱的中间
plot_centers = (bins [:-1] + bins [1:])/2
plot_values = group.B.mean()
Run Code Online (Sandbox Code Playgroud)
并与
plt.plot(plot_centers, plot_values)
Run Code Online (Sandbox Code Playgroud)
您应该小心处理丢失的数据,即如果您有一个没有数据的 bin。在这种情况下,您可以使用fillna(0), 使全部为NaNs0。
plot_values = group.B.mean().fillna(0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3088 次 |
| 最近记录: |