python - 准备 pandas 数据框以使用误差条进行绘图

标签 python numpy pandas ggplot2

我正在准备一个 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”下似乎太复杂了。

最佳答案

尝试在没有 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')

您应该得到以下结果: enter image description here

关于python - 准备 pandas 数据框以使用误差条进行绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416326/

相关文章:

javascript - 数组索引选择类似于 numpy 但在 javascript 中

python - 在 Pandas 中将 numpy.int64 转换为 python int

python - 如何逐个创建 DataFrame 切片对象?

python - Numpy NdArray 记忆化

python - 具有时变截止频率的低通滤波器,使用 Python

python - Pandas 按类别散点图

python - 我如何在 jinja2 中构建可重用的小部件?

python - 对 pandas 中的列值进行排序

python - 屏幕锁定后保持 Python 脚本运行(Win.7)

python - 发现轮廓不准确