Как я могу унифицировать количество десятичных знаков в ggplot? - PullRequest
0 голосов
/ 30 мая 2019

У меня более сложный код по сравнению с приведенными примерами, и я не могу представить, как мне нужно изменить код, чтобы получить одинаковое количество знаков после запятой для всех баров моей гистограммы.Для большинства столбцов R уже показывает два десятичных знака.Однако, когда второе десятичное место представляет собой «0», R показывает только одно десятичное место.Может кто-нибудь показать мне, как стандартизировать десятичный разряд до 2 и как интегрировать команду в моем коде?

Я уже пробовал "цифры" и указать_десятичное, но не смог правильно интегрировать его в мой код (в scale_x_continuous),

df1_long %.>%
  ggplot(
    data = .,
    aes(
      x = xpos,
      y = val,
      fill = Ebene
  )) +
  geom_rect(aes(
      xmin = xpos - .5,
      xmax = xpos + .5,
      ymin = -Inf,
      ymax = Inf,
      fill = Problemzahl
    ),
    alpha = .3
  ) +
  geom_col(
    position = position_dodge(.5),
    colour="black",
    width = .5
  ) +
  geom_errorbar(aes(
      ymin = val - SE,
      ymax = val + SE
    ),
    position = position_dodge(.5),
    width = .2
  ) +
  geom_text(aes(
      y = val + SE + .02,
      label = val %>% str_replace('\\.', ',')
    ),
    position = position_dodge(.5)
  ) +
  scale_fill_manual(
    values = c(
      '#aaaaaa',  # Beide Problemarten
      '#000000',  # Co
      '#dddddd',  # Keine Probleme
      '#CCCCCC',  # Motivationale Probleme
      '#333333',  # Self
      '#666666',  # Shared
      '#bbbbbb'   # Verständnisbezogene Probleme  
    ),
    breaks = c(
      'Self',
      'Co',
      'Shared'
    )
  ) +
  scale_x_continuous(
    breaks = .$xpos %>% unique(),
    labels = .$Problemzahl %>% unique(),
    expand = c(0, 0)
  ) +
  scale_y_continuous(
    labels = function(x) str_replace(x, '\\.', ','),
    limits = c(0, 1.0),
    expand = c(0, 0)
  ) +
  ylab('Allgemeine Regulationsaktivität auf der Self-, Co-, und Shared Ebene\n(KI 95%)') +
  theme_classic() +
  theme(
    legend.position = 'top',
    legend.title = element_blank(),
    legend.spacing.x = unit(1, 'mm'),
    axis.title.x = element_blank()
  )

1 Ответ

0 голосов
/ 30 мая 2019

Я бы изменил код в вашем канале перед вызовом ggplot.Вот хороший пример использования пакета formattable .

library(tidyverse)
library(formattable)

df1_long %>%
  mutate(val = formattable(val, digits = 2, format = "f")) %>%
  ggplot(
  ...
)

Вы можете заменить любое имя переменной на val, в зависимости от того, какое имя вы хотите стандартизировать до двух десятичных разрядов.

...