r - 如何使用ggplot绘制每行标准偏差的线

标签 r plot ggplot2 graph standard-deviation

我想用每行的中位数(不是列!)(第一列的值除外)绘制一个图形,标准差作为误差条。结果应该类似于:

enter image description here

我有一个这样的数据框:

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=",")

最佳答案

下面的代码创建了一个辅助函数来提供用于绘图的中值和 sd 值。我们还在绘图前将数据转换为“长”格式。

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))

enter image description here

您可以使用以下代码避免使用辅助函数,但如果您要经常执行此操作,则使用该函数非常方便。
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))

关于r - 如何使用ggplot绘制每行标准偏差的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50495020/

相关文章:

r - 动态改变ggplot2的背景颜色

r - 使用 opts() 更改图例位置/方向无效

r - 如何在 R 中打印函数名称及其底层源代码

r - 按顺序提取子字符串

python - 将图 "caracteristics"从一个类复制到另一个类

c++ - 绘图框架

r - R 中的冲积图 : how to space the strata?

r - R中因子之间的斯 PIL 曼等级相关性

r - 随着时间的推移逐行比较 2 个数据帧的分析

python - matplotlib 箭头和纵横比