【问题标题】:pandas: plot mean values within bins - formatting help needed熊猫:在箱内绘制平均值 - 需要格式化帮助
【发布时间】:2018-04-19 21:14:27
【问题描述】:

我正在做一些太阳系动力学模拟,并且一直以这个项目为借口自学一些 python/pandas。生成的数据集有 1000 多条记录,其中包含每个相关天体的轨道倾角、偏心率等值。

我正在尝试使用 pandas 来研究结果数据中约 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 轴的数字会挤在一起并重叠。它们也不完全是我想看到的:它们显示了 bin 的最大值和最小值,我更喜欢直接按 5s 或类似的方式滴答作响。

pandas output from above command

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

谢谢,

G

【问题讨论】:

  • 查看如何旋转 xticks。
  • @cᴏʟᴅsᴘᴇᴇᴅ 这与旋转刻度无关。这是关于为已按箱分组的图获得直接的正常刻度标签。为避免混淆,格伦,您能否在问题中更清楚地说明这一点?!此外,提供该问题的minimal reproducible example 也会有所帮助(请参阅How to make good reproducible pandas examples)。
  • @ImportanceOfBeingErnest 相信你,重新打开骗局。如果您找到更合适的骗子,请重新关闭。
  • @cᴏʟᴅsᴘᴇᴇᴅ 我什至不确定是否可以提出要求。但我想如果有人对此有一个好主意,不应该阻止这个问题得到回答。 minimal reproducible example 将允许寻找替代方案(也许不使用 cut 并且以不同的方式分箱数据会有所帮助)。
  • 谢谢大家。我将研究最小、完整和可验证的示例。与此同时,KPLauritzen 提供的解决方案似乎运作良好。我期待更多地了解这一切——这很有趣!

标签: python pandas matplotlib plot bins


【解决方案1】:

当我想做这样的事情时,我直接去 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多