【问题标题】:preparing pandas dataframes for plotting with errorbars准备熊猫数据框以使用误差线进行绘图
【发布时间】:2015-02-09 18:03:56
【问题描述】:

我正在准备一个 pandas 数据框,用于在 R 的 ggplot2 中使用误差线进行绘图,这需要计算列的统计信息。误差条需要最小值(平均值 - 标准偏差)和 最大值(平均值 + 标准偏差)。我使用 groupby/agg 获得这些:

import pandas
import numpy as np

df = pandas.DataFrame({"id": ["a", "b", "c", "d"],
                       "exp": [10, 20, 30, 40],
                       "res1": [11, 22, 35, 42],
                       "res2": [9, 19, 32, 40],
                       "res3": [10.5, 20.8, 34, 48]})
# melt dataframe
m = pandas.melt(df, id_vars=["id", "exp"])
# get mean/std
summary = m.groupby("exp").agg([np.mean, np.std])
# add min and max under "value"
summary[("value", "min")] = summary[("value", "mean")] - summary[("value", "std")]
summary[("value", "max")] = summary[("value", "mean")] + summary[("value", "std")]

然后用 R 绘制如下:

# plot with R
p = ggplot2.ggplot(m) + \
    ggplot2.geom_point(aes_string(x="exp", y="value", colour="variable"), data=m)
    ggplot2.geom_errorbar(aes_string(x="exp", y="mean", ymin="min", ymax="max"), data=summary)

有没有一种方法可以简化“min”/“max”列的计算,因为它是如此常见的操作?是否有必要创建一个单独的数据框(上面的“摘要”),或者是否有一种优雅的方式可以将相同的信息放入原始融化的数据框?

groupby 返回一个分层索引的数据框,所以我把“mean”和“std”放在“value”下似乎太复杂了。

【问题讨论】:

    标签: python numpy pandas ggplot2


    【解决方案1】:

    尝试在不使用 numpy .agg 函数的情况下执行相同的操作,并使用 Pandas 中内置的 .mean() 和 .std() 函数。

    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame({"id": ["a", "b", "c", "d"],
                       "exp": [10, 20, 30, 40],
                       "res1": [11, 22, 35, 42],
                       "res2": [9, 19, 32, 40],
                       "res3": [10.5, 20.8, 34, 48]})
    
    m = pd.melt(df, id_vars=["id", "exp"])
    
    mean = m.groupby("exp").mean()
    
    errors = m.groupby("exp").std()
    
    fig, ax = plt.subplots()
    mean.plot(yerr=errors, kind='bar')
    

    您应该得到以下结果:

    【讨论】:

    • ggplot 中是否有等价于mean.plot(yerr=errors, kind='bar') 的内容?
    • 您是使用 rpy2 加载数据帧,还是在将数据帧加载到 R 之前将其保存为其他格式?
    • 另外,这里有一篇关于 ggplot2 错误绘图的好帖子 - docs.ggplot2.org/0.9.3.1/geom_errorbar.html
    猜你喜欢
    • 2017-12-16
    • 2018-03-19
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2018-04-06
    相关资源
    最近更新 更多