Показать значения в верхней части столбцов в r, используя ggplot2 [duplicate]

Попробуйте это регулярное выражение:

^[^\s]+(\s.*)?$

Это означает один или несколько символов, которые не являются пробелами, а затем, возможно, пробелом, за которым следует что-либо.

3
задан umair durrani 25 October 2016 в 21:22
поделиться

1 ответ

Проще всего вычислить нужные вам величины за пределами ggplot, так как трудно отслеживать, что вычисляет ggplot и где эти величины хранятся и доступны.

Сначала суммируем ваши данные:

library(dplyr)

mtcars %>% count(cyl = factor(cyl), gear = factor(gear)) %>% 
    ungroup() %>%    # drop if you want percentages per cylinder
    mutate(pct = prop.table(n) * 100)

## # A tibble: 8 × 4
##      cyl   gear     n    pct
##   <fctr> <fctr> <int>  <dbl>
## 1      4      3     1  3.125
## 2      4      4     8 25.000
## 3      4      5     2  6.250
## 4      6      3     2  6.250
## 5      6      4     4 12.500
## 6      6      5     1  3.125
## 7      8      3    12 37.500
## 8      8      5     2  6.250

Сохраните это, если хотите, или прямо в ggplot:

mtcars %>% count(cyl = factor(cyl), gear = factor(gear)) %>% 
    ungroup() %>%
    mutate(pct = prop.table(n) * 100) %>% 
    ggplot(aes(x = cyl, y = pct, fill = gear)) + 
    geom_bar(stat = 'identity', position = 'dodge') + 
    geom_text(aes(y = pct + .5,    # nudge above top of bar
                  label = paste0(pct, '%')),    # prettify
              position = position_dodge(width = .9), 
              size = 3)

Если вы действительно хотите его сохранить все внутренние по отношению к ggplot, вы можете использовать geom_text с stat = 'count' (или stat_count с geom = "text", если хотите):

ggplot(data = mtcars, aes(x = factor(cyl), fill = factor(gear))) +
    geom_bar(aes(y = prop.table(..count..) * 100),
             position = "dodge") + 
    geom_text(aes(y = prop.table(..count..) * 100 + 0.5, 
                  label = paste0(prop.table(..count..) * 100, '%')), 
              stat = 'count', 
              position = position_dodge(.9), 
              size = 3) + 
    labs(x = 'cyl', y = 'pct', fill = 'gear')

, который изображает одно и то же.

14
ответ дан alistaire 15 August 2018 в 17:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: