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

时间:2017-01-10 12:23:12

标签: 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(timetep)定义几个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) 我是否可以将其重新整形为平滑/适合的线,其间距仅为以下特定间隔: (desired format)

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

Edit3:案例由user127649解决。谢谢我实际上坐了几个小时试图在你帮助我之前找出谷歌搜索谷歌!

1 个答案:

答案 0 :(得分:0)

如果你想绘制中位数和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了解更多选项