如何绘制已在 R 中按行排序的数据的中位数和四分位数范围?
How to plot the median and interquartile range of data that is already sorted by row in R?
我的数据框是这样排列的
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's(运行1,运行2,运行3...) 的输入(时间步长)。而且我也不确定如何最好地重新格式化数据以避免按行使用它。
//编辑:感谢帮助
library(reshape)
plotsmelt = melt(plots, id="time")
library(ggplot2)
ggplot(plotsmelt,aes(x=time,y=value)) +
stat_summary(fun.data=median_hilow)
这段代码完成了第一部分。现在我的图表看起来像这样:
(current graph)
我可以将它重塑为 smoothed/fitted 线,仅在特定间隔内使用四分位数,如下所示:
(desired format)
//Edit2:再次感谢!现在我有正确间隔的四分位数。现在我只需要一种方法来显示通过中值数据点的 fitted/smoothed 曲线,我的图表就完成了。
Edit3:案例由 user127649 解决。谢谢,在你帮助我之前,我实际上花了几个小时试图解决这个问题 google!
如果您想绘制中位数和 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
我的数据框是这样排列的
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's(运行1,运行2,运行3...) 的输入(时间步长)。而且我也不确定如何最好地重新格式化数据以避免按行使用它。
//编辑:感谢帮助
library(reshape)
plotsmelt = melt(plots, id="time")
library(ggplot2)
ggplot(plotsmelt,aes(x=time,y=value)) +
stat_summary(fun.data=median_hilow)
这段代码完成了第一部分。现在我的图表看起来像这样: (current graph) 我可以将它重塑为 smoothed/fitted 线,仅在特定间隔内使用四分位数,如下所示: (desired format)
//Edit2:再次感谢!现在我有正确间隔的四分位数。现在我只需要一种方法来显示通过中值数据点的 fitted/smoothed 曲线,我的图表就完成了。
Edit3:案例由 user127649 解决。谢谢,在你帮助我之前,我实际上花了几个小时试图解决这个问题 google!
如果您想绘制中位数和 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