我是 r 的新用户(和 stackoverflow,请事先原谅我的格式)并且在制作条形图时遇到了麻烦(使用 ggplot,tidyverse 包)。
我需要制作一个条形图,其中 x 轴上有多个列和两个子组,y 轴上有一个平均值。
我的数据如下所示
# A tibble: 6 x 5
Id Baseline Tyr1 Tyr2 Time
<dbl> <dbl> <dbl> <dbl> <chr>
1 1 0.536 0.172 0.141 pre
2 2 0.428 0.046 0.084 post
3 3 0.077 0.015 0.063 pre
4 4 0.2 0.052 0.041 post
5 5 0.161 0.058 0.039 pre
6 6 0.219 0.059 0.05 post
我想绘制一个条形图,其中 x 轴 = 基线、Tyr1、Tyr2 和时间子组,y 轴 = 平均值。我相信我可以使用填充功能来制作子组,但是,我找不到将所有列都放在 x 轴上的方法。
目标是让它看起来像下面这样(我不确定图片是否正在上传?):
实现这一点的最好方法是重新塑造你的数据集,然后用它position_dodge
来分隔对应于不同时间的条形。所以:
library(ggplot2)
library(tidyr)
dat %>%
pivot_longer(cols=-c(Id,Time)) %>%
ggplot(aes(x=name, y=value, fill=Time, group=Time)) +
stat_summary(geom="col",width=0.8,position=position_dodge()) +
stat_summary(geom="errorbar",width=0.2,position=position_dodge(width=0.8))
还可以考虑添加数据点以提高透明度。如果您的读者能够看到各个点,他们将更容易理解数据并判断其含义:
dat %>%
pivot_longer(cols=-c(Id,Time)) %>%
ggplot(aes(x=name, y=value, fill=Time, group=Time)) +
stat_summary(geom="col",width=0.8,position=position_dodge()) +
stat_summary(geom="errorbar",width=0.2,position=position_dodge(width=0.8)) +
geom_point(position = position_dodge(width=0.8))
要了解重塑发生了什么,中间数据集如下所示:
> dat %>%
+ pivot_longer(cols=-c(Id,Time))
# A tibble: 18 x 4
Id Time name value
<int> <chr> <chr> <dbl>
1 1 pre Baseline 0.536
2 1 pre Tyr1 0.172
3 1 pre Tyr2 0.141
4 2 post Baseline 0.428
5 2 post Tyr1 0.046
6 2 post Tyr2 0.084
7 3 pre Baseline 0.077
8 3 pre Tyr1 0.015
9 3 pre Tyr2 0.063
10 4 post Baseline 0.2
11 4 post Tyr1 0.052
12 4 post Tyr2 0.041
13 5 pre Baseline 0.161
14 5 pre Tyr1 0.058
15 5 pre Tyr2 0.039
16 6 post Baseline 0.219
17 6 post Tyr1 0.059
18 6 post Tyr2 0.05
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句