如何使用ggplot绘制每行标准差的线
How to plot line with standard deviation of each row with ggplot
我想用每行(不是列!)的中位数(第一列的值除外)绘制一个图表,标准差作为误差条。结果应该类似于:
我有一个这样的数据框:
myTable <- "
1 -50 -52
2 -44 -51
3 -48 -50
4 -50 -49
5 -44 -49
6 -48 -49
7 -48 -49
8 -44 -48
9 -49 -48
10 -48 -45
11 -60 -48
10 -50 -48
11 -80 -47"
df <- read.table(text=myTable, header = TRUE)
df <- c("ID","Value1","Value2");
我的数据存储在 .csv 文件中,我使用以下行加载该文件:
df <- read.csv(file="~/path/to/myFile.csv", header=FALSE, sep=",")
下面的代码创建了一个辅助函数来提供绘图的中值和标准差值。在绘图之前,我们还将数据转换为 "long" 格式。
library(tidyverse)
theme_set(theme_bw())
df <- read.table(text=myTable, header = TRUE)
names(df) <- c("ID","Value1","Value2")
median_sd = function(x, n=1) {
data_frame(y = median(x),
sd = sd(x),
ymin = y - n*sd,
ymax = y + n*sd)
}
ggplot(df %>% gather(key, value, -ID), aes(ID, value)) +
stat_summary(fun.data=median_sd, geom="errorbar", width=0.1) +
stat_summary(fun.y=median, geom="line") +
stat_summary(fun.y=median, geom="point") +
scale_x_continuous(breaks=unique(df$ID))
您可以使用以下代码避免辅助函数,但如果您要经常执行此操作,则该函数很方便。
ggplot(df %>% gather(key, value, -ID), aes(ID, value)) +
stat_summary(fun.y=median, fun.ymin=function(x) median(x) - sd(x),
fun.ymax=function(x) median(x) + sd(x), geom="errorbar", width=0.1) +
stat_summary(fun.y=median, geom="line") +
stat_summary(fun.y=median, geom="point") +
scale_x_continuous(breaks=unique(df$ID))
我想用每行(不是列!)的中位数(第一列的值除外)绘制一个图表,标准差作为误差条。结果应该类似于:
我有一个这样的数据框:
myTable <- "
1 -50 -52
2 -44 -51
3 -48 -50
4 -50 -49
5 -44 -49
6 -48 -49
7 -48 -49
8 -44 -48
9 -49 -48
10 -48 -45
11 -60 -48
10 -50 -48
11 -80 -47"
df <- read.table(text=myTable, header = TRUE)
df <- c("ID","Value1","Value2");
我的数据存储在 .csv 文件中,我使用以下行加载该文件:
df <- read.csv(file="~/path/to/myFile.csv", header=FALSE, sep=",")
下面的代码创建了一个辅助函数来提供绘图的中值和标准差值。在绘图之前,我们还将数据转换为 "long" 格式。
library(tidyverse)
theme_set(theme_bw())
df <- read.table(text=myTable, header = TRUE)
names(df) <- c("ID","Value1","Value2")
median_sd = function(x, n=1) {
data_frame(y = median(x),
sd = sd(x),
ymin = y - n*sd,
ymax = y + n*sd)
}
ggplot(df %>% gather(key, value, -ID), aes(ID, value)) +
stat_summary(fun.data=median_sd, geom="errorbar", width=0.1) +
stat_summary(fun.y=median, geom="line") +
stat_summary(fun.y=median, geom="point") +
scale_x_continuous(breaks=unique(df$ID))
您可以使用以下代码避免辅助函数,但如果您要经常执行此操作,则该函数很方便。
ggplot(df %>% gather(key, value, -ID), aes(ID, value)) +
stat_summary(fun.y=median, fun.ymin=function(x) median(x) - sd(x),
fun.ymax=function(x) median(x) + sd(x), geom="errorbar", width=0.1) +
stat_summary(fun.y=median, geom="line") +
stat_summary(fun.y=median, geom="point") +
scale_x_continuous(breaks=unique(df$ID))