在R ggplot2中为每个样本包含2个重复样本的 Dataframe 创建折线图的最佳方法是什么

50pmv0ei  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(100)

我已经尝试了很长时间,试图找出最好的方法来操作一个小的 Dataframe ,使其成为一种可以在ggplot中使用的格式,以创建一个 Dataframe 的基础上,每个条件的平均值与误差条。
这是 Dataframe :

Dilution A2T2.R1 A2T2.R2 X293T.R1 X293T.R2 TZMbl.R1 TZMbl.R2
1       10       1       1        1        1        1        1
2       40       1       1        1        1        1        1
3      160       1       1        1        1        1        1
4      640       1       1        1        1       36       33
5     2560     102     101       98       98       80       78
6    10240     100     101       97       97       97       99
7    40960      99      92       98       98       98       93
8   163840      99      97       99       98       99      100

有三个不同的样本,A2 T2、293 T和TZMbl,每个样本有两个重复样本(R1和R2)。我想将它们绘制在带有连接线的折线图上,但绘制的是每个重复样本的平均值,带有标准偏差或标准误差线。我想将值绘制在Y轴上,将稀释度绘制在X轴上。
我的主要问题是把它转换成一种格式,可以用来a)计算统计数据和b)用于ggplot。
我一直在尝试重塑和收集,但我很难让它们按计划工作
谢谢你的帮助!

ruarlubt

ruarlubt1#

我不认为有最好的方法来实现这一点,但我可以尝试使用dplyrtidyr来展示一种方法。
ggplot2喜欢处理长格式数据,因此第一步是调整数据框,以便每行有一个观测值。在下面的示例中,我为重复次数创建了一列,但您可以删除该列,因为它实际上在此处没有使用。接下来,汇总数据以获得您感兴趣的绘图值(每个细胞/稀释对的平均值)。最后,我们绘制一个绘图。
希望这有帮助!

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)

df <- structure(list(Dilution = c(10, 40, 160, 640, 2560, 10240, 40960, 
                                  163840), A2T2_R1 = c(1, 1, 1, 1, 102, 100, 99, 99), A2T2_R2 = c(1, 
                                                                                                  1, 1, 1, 101, 101, 92, 97), X293T_R1 = c(1, 1, 1, 1, 98, 97, 
                                                                                                                                           98, 99), X2093T_R2 = c(1, 1, 1, 1, 98, 97, 98, 98), TZMbl_R1 = c(1, 
                                                                                                                                                                                                            1, 1, 36, 80, 97, 98, 99), TZMbl_R2 = c(1, 1, 1, 33, 78, 99, 
                                                                                                                                                                                                                                                    93, 100)), row.names = c(NA, -8L), spec = structure(list(cols = list(
                                                                                                                                                                                                                                                      Dilution = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                             "collector")), A2T2.R1 = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                                                                                  "collector")), `A2T2.R2 X29` = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                                                                                                                                             "collector")), `3T.R1 X29` = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "collector")), `3T.R2 TZM` = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "collector")), bl.R1 = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  "collector")), TZMbl.R2 = structure(list(), class = c("collector_double", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        "collector"))), default = structure(list(), class = c("collector_guess", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              "collector")), delim = ","), class = "col_spec"), class = c("spec_tbl_df", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             "tbl_df", "tbl", "data.frame"))

df %>%
  # ggplot prefers longer data 
  pivot_longer(cols = -Dilution,
               names_to = c('cell','rep'),
               values_to = 'value',
               names_sep = '_') %>%
  # add mean and standard deviations
  group_by(cell, Dilution) %>%
  summarize(mean = mean(value),
            sd = sd(value)) %>%
  # Create a plot
  ggplot(aes(x = Dilution, y = mean, color = cell)) +
  geom_line() +
  geom_errorbar(aes(ymin = mean - sd,
                    ymax = mean + sd))
#> `summarise()` has grouped output by 'cell'. You can override using the
#> `.groups` argument.

创建于2023年3月15日,使用reprex v2.0.2

相关问题