ggplot2 R:具有多个变量的百分比堆叠条形图
ggplot2 R : Percent stacked barchart with multiple variables
R 版本 4.0.5 (2021-03-31)
平台:x86_64-w64-mingw32/x64(64 位)
运行 下:Windows 10 x64(内部版本 19042)
我想创建一个包含 2 个组(区域组、国际组)和 4 个不同数值变量(地面低强度、地面高强度、站立低强度、站立高强度)平均值的百分比堆叠条形图.后面的变量代表每个时间段的持续时间(以秒为单位)。
我的数据是:
dataset
下图是我想要制作的示例:
Time-motion analysis description relative to total fight time, considering modalities and positions of actions Coswig, V. S., Gentil, P., Bueno, J. C., Follmer, B., Marques, V. A., & Del Vecchio, F. B. (2018). Physical fitness predicts technical-tactical and time-motion profile in simulated Judo and Brazilian Jiu-Jitsu matches. PeerJ, 6, e4851.
我已经阅读了很多指南并观看了很多 YT 教程,但大多数都使用 2 个分类变量和 1 个数值变量,因此,它不适用于我的情况。
非常感谢任何帮助或指导。
提前谢谢你。
你会在这里找到很多朋友,如果你提供一个可重现的例子并展示你做了什么以及哪里出了问题。
数据
ds <- tribble(
~GROUP, ~GLI, ~GHI,~SLI, ~SHI,~GT,~ST,~EFFORT, ~PAUSE, ~HI, ~LI
,"REG", 158, 48, 26, 4, 205, 30, 235, 10, 51, 184
,"INT", 217, 62, 20, 1, 279, 21, 300, 11, 63, 237
)
{ggplot} 最适合长数据。 tidyr 是你的朋友,pivot_longer()
ds <- ds %>%
pivot_longer(
cols=c(GLI:SHI) # wich cols to take
, names_to = "intensity" # where to put the names aka intensitites
, values_to = "duration" # where to put the values you want to plot
) %>%
#-------------------- calculate the shares of durations per group
group_by(GROUP) %>%
mutate(share = duration / sum(duration)
)
这给了你这样的提示:
# A tibble: 8 x 10
# Groups: GROUP [2]
GROUP GT ST EFFORT PAUSE HI LI intensity duration share
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 REG 205 30 235 10 51 184 GLI 158 0.669
2 REG 205 30 235 10 51 184 GHI 48 0.203
3 REG 205 30 235 10 51 184 SLI 26 0.110
4 REG 205 30 235 10 51 184 SHI 4 0.0169
5 INT 279 21 300 11 63 237 GLI 217 0.723
6 INT 279 21 300 11 63 237 GHI 62 0.207
7 INT 279 21 300 11 63 237 SLI 20 0.0667
8 INT 279 21 300 11 63 237 SHI 1 0.00333
最后一列为您提供类别和持续时间百分比,分组是使用 GROUP 变量完成的。
然后你可以用ggplot打印它。
ds %>%
ggplot() +
geom_col(aes(x = GROUP, y = share, fill = intensity), position = position_stack()) +
scale_y_continuous(labels=scales::percent)
然后您可以“美化”情节,选择所需的主题、颜色、图例等。
希望这能让您入门!
R 版本 4.0.5 (2021-03-31) 平台:x86_64-w64-mingw32/x64(64 位) 运行 下:Windows 10 x64(内部版本 19042)
我想创建一个包含 2 个组(区域组、国际组)和 4 个不同数值变量(地面低强度、地面高强度、站立低强度、站立高强度)平均值的百分比堆叠条形图.后面的变量代表每个时间段的持续时间(以秒为单位)。
我的数据是: dataset
下图是我想要制作的示例: Time-motion analysis description relative to total fight time, considering modalities and positions of actions Coswig, V. S., Gentil, P., Bueno, J. C., Follmer, B., Marques, V. A., & Del Vecchio, F. B. (2018). Physical fitness predicts technical-tactical and time-motion profile in simulated Judo and Brazilian Jiu-Jitsu matches. PeerJ, 6, e4851.
我已经阅读了很多指南并观看了很多 YT 教程,但大多数都使用 2 个分类变量和 1 个数值变量,因此,它不适用于我的情况。
非常感谢任何帮助或指导。
提前谢谢你。
你会在这里找到很多朋友,如果你提供一个可重现的例子并展示你做了什么以及哪里出了问题。
数据
ds <- tribble(
~GROUP, ~GLI, ~GHI,~SLI, ~SHI,~GT,~ST,~EFFORT, ~PAUSE, ~HI, ~LI
,"REG", 158, 48, 26, 4, 205, 30, 235, 10, 51, 184
,"INT", 217, 62, 20, 1, 279, 21, 300, 11, 63, 237
)
{ggplot} 最适合长数据。 tidyr 是你的朋友,pivot_longer()
ds <- ds %>%
pivot_longer(
cols=c(GLI:SHI) # wich cols to take
, names_to = "intensity" # where to put the names aka intensitites
, values_to = "duration" # where to put the values you want to plot
) %>%
#-------------------- calculate the shares of durations per group
group_by(GROUP) %>%
mutate(share = duration / sum(duration)
)
这给了你这样的提示:
# A tibble: 8 x 10
# Groups: GROUP [2]
GROUP GT ST EFFORT PAUSE HI LI intensity duration share
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 REG 205 30 235 10 51 184 GLI 158 0.669
2 REG 205 30 235 10 51 184 GHI 48 0.203
3 REG 205 30 235 10 51 184 SLI 26 0.110
4 REG 205 30 235 10 51 184 SHI 4 0.0169
5 INT 279 21 300 11 63 237 GLI 217 0.723
6 INT 279 21 300 11 63 237 GHI 62 0.207
7 INT 279 21 300 11 63 237 SLI 20 0.0667
8 INT 279 21 300 11 63 237 SHI 1 0.00333
最后一列为您提供类别和持续时间百分比,分组是使用 GROUP 变量完成的。 然后你可以用ggplot打印它。
ds %>%
ggplot() +
geom_col(aes(x = GROUP, y = share, fill = intensity), position = position_stack()) +
scale_y_continuous(labels=scales::percent)
然后您可以“美化”情节,选择所需的主题、颜色、图例等。 希望这能让您入门!