ggplot2为柱状图选择类别并创建标签。

问题描述 投票:0回答:1

我试图用ggplot2制作条形图,数据集如下。当我使用下面的代码

ggplot(p.data, aes(x = `Period Number`, y = `Total Jumps`)) +
  stat_summary(data = subset(p.data, Status = "Starter"), fun ="mean", geom = "bar")

我得到这个图。

plot

最令人担忧的是,第2、3、4、5期的条形图应该更高(第2期应该在9.9左右)。此外,我想删除周期0和周期1,并添加条形标签与原始数据,而不创建一个额外的数据框架。

p.data <-   structure(list(`Period Number` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), 
    `Total Jumps` = c(112L, 97L, 28L, 132L, 162L, 19L, 92L, 112L, 
    97L, 141L, 68L, 86L, 76L, 26L, 105L, 125L, 19L, 92L, 112L, 
    64L, 101L, 68L, 4L, 8L, 0L, 8L, 12L, 0L, 0L, 0L, 13L, 8L, 
    0L, 8L, 2L, 2L, 5L, 12L, 0L, 0L, 0L, 5L, 11L, 0L, 0L, 6L, 
    0L, 9L, 8L, 0L, 0L, 0L, 7L, 10L, 0L, 14L, 5L, 0L, 5L, 5L, 
    0L, 0L, 0L, 8L, 11L, 0L, 108L, 131L, 47L, 136L, 159L, 35L, 
    114L, 116L, 111L, 190L, 64L, 75L, 95L, 47L, 116L, 123L, 27L, 
    103L, 108L, 70L, 152L, 64L, 4L, 7L, 0L, 14L, 10L, 0L, 0L, 
    0L, 15L, 10L, 0L, 4L, 0L, 0L, 3L, 7L, 7L, 8L, 8L, 5L, 10L, 
    0L, 7L, 14L, 0L, 3L, 10L, 1L, 0L, 0L, 11L, 7L, 0L, 18L, 15L, 
    0L, 0L, 9L, 0L, 3L, 0L, 10L, 11L, 0L, 118L, 96L, 48L, 143L, 
    170L, 37L, 118L, 117L, 116L, 165L, 56L, 80L, 68L, 48L, 114L, 
    130L, 36L, 114L, 107L, 80L, 123L, 56L, 2L, 10L, 0L, 8L, 11L, 
    0L, 0L, 0L, 5L, 9L, 0L, 4L, 12L, 0L, 6L, 5L, 0L, 4L, 8L, 
    12L, 8L, 0L, 7L, 4L, 0L, 10L, 10L, 0L, 0L, 0L, 12L, 13L, 
    0L, 25L, 2L, 0L, 5L, 14L, 1L, 0L, 2L, 7L, 12L, 0L), Status = structure(c(1L, 
    2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 
    2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
    1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 
    1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 
    1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 
    2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 
    1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 
    1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 
    2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 
    2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 
    2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 
    2L, 1L), .Label = c("Bench", "Starter"), class = "factor")), row.names = c(NA, 
198L), class = "data.frame")

谢谢您的帮助

r ggplot2 geom-bar
1个回答
2
投票

最好是将你的数据传递给 居心 绘图函数,而不是试图强迫它。 的绘图函数。在这种情况下,您试图从您传递给 ggplot 里面 stat_summary. 呼吁 ggplot 你已经设置了你想要映射的美学,那么在你唯一的geom层中,你告诉ggplot你想要一套完全不同的美学。

你不需要创建另一个数据框架来重塑你的数据。下面是你如何使用 dplyr:

library(dplyr)
library(ggplot2)

p.data %>% 
  filter(Status == "Starter") %>% 
  group_by(`Period Number`) %>%
  summarise(`Total Jumps` = mean(`Total Jumps`)) %>%
  filter(`Period Number` > 1) %>%
  ggplot(aes(x = `Period Number`, y = `Total Jumps`)) + 
  geom_col(fill = "dodgerblue", colour = "black") +
  geom_text(aes(y = `Total Jumps` + 1, label = signif(`Total Jumps`, 2)))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.