r - 如何绘制已在 R 中按行排序的数据的中位数和四分位数范围?

标签 r row median

我的数据框是这样排列的

time run1 run2 run3 run4 run5
0    2.0  3.0  3.5  4.0  2.0
1    1.5  2.5  4.5  6.5  2.5
2    [...]
[...]

我想绘制每个时间点运行值的中值。 我尝试在 ggplot 中使用 stat_summary 但我不知道如何为每个 x(时间步)定义多个 y(run1,run2,run3 ...)的输入。而且我也不确定如何最好地重新格式化数据以避免按行使用它。

//编辑:感谢您的帮助

library(reshape)
plotsmelt = melt(plots, id="time")

library(ggplot2)
ggplot(plotsmelt,aes(x=time,y=value)) + 
stat_summary(fun.data=median_hilow)

这段代码完成了第一部分。现在我的图表看起来像这样: (current graph) 我可以将它 reshape 为一条平滑/拟合的线,仅在特定的间隔内使用四分位数,如下所示: (desired format)

//Edit2:再次感谢!现在我有正确间隔的四分位数。现在我只需要一种方法来显示通过中值数据点的拟合/平滑曲线,我的图表就完成了。

Edit3:案例由 user127649 解决。谢谢,在你帮助我之前,我实际上花了几个小时试图通过搜索谷歌来解决这个问题!

最佳答案

如果您想绘制中位数和 IQR,这听起来像是在尝试绘制箱线图?

首先你应该重新排列你的数据

library(reshape)
data.m <- melt(data)

然后在ggplot中绘制它

ggplot(data.m, aes(variable, value)
    geom_boxplot()

编辑 #1

这可能有点粗糙,但按照这些思路应该可以在所需的时间间隔内获得 IQR。我认为您需要在单独的层中添加中位数和 IQR:

ggplot(data.m,aes(x = time, y = value)) +
     stat_summary(fun.y = "median", geom = "point") +
     stat_summary(data = data.m[data.m$time %% 10 == 0, ], colour = fun.data = median_hilow)

显然,您应该将 data.m[data.m$time %% 10 == 0, ] 更改为您需要的间隔

编辑 #2

添加拟合线:

 + geom_smooth(method = lm)

查看 ?geom_smooth 了解更多选项

关于r - 如何绘制已在 R 中按行排序的数据的中位数和四分位数范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41568799/

相关文章:

javascript - next sibling 的表问题

python - Pandas 将 DataFrame2 ROW append 到 DataFrame1 ROW

Python/plotly : How to make each data point on Scatter plot represent median value?

language-agnostic - 在没有数据结构的情况下寻找中位数

r - 在 R 中使用 Welch 校正的单向 ANOVA 的事后检验

r - 使用 sf 围绕点(质心)创建网格

r - 跨区间边界对数据进行分箱

php explode mysql 行

bash - 用awk计算滑动窗口的中值

bash - 如何确保在 Ubuntu 中安装 JAGS 和 rjags 的兼容版本?