Отображение значения оси в миллионах в ggplot - PullRequest
0 голосов
/ 02 октября 2018

У меня есть диаграмма, где я рисую очень большие цифры в миллионах.Моя аудитория вряд ли поймет научную нотацию, поэтому я надеюсь обозначить ось y чем-то вроде «2M» для двух миллионов, например.

Вот пример.Отображение полного значения (scales::comma) лучше, чем научное обозначение, которое используется по умолчанию, но все еще немного занято:

library(ggplot2)
ggplot(as.data.frame(list(x = c(0, 200,100), y = c(7500000,10000000,2000000))), 
       aes(x = x, y = y)) +
  geom_point() +
  expand_limits( x = c(0,NA), y = c(0,NA)) +
  scale_y_continuous(labels = scales::comma)

enter image description here

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

Ответы [ 3 ]

0 голосов
/ 10 марта 2019

Как и во многих других ситуациях при использовании ggplot2, я думаю, что самый простой способ сделать это - манипулировать данными до передачи их в функцию ggplot ().Я бы просто создал новый столбец данных со значениями в миллионах, например:

library(dplyr)
library(ggplot2)

df <- data.frame(x = c(0, 200,100),
                 y = c(7500000,10000000,2000000)) %>% 
    mutate(y_millions = y/1e6)

ggplot(df, 
       aes(x = x, 
           y = y_millions)) + 
    geom_point() + 
    labs(y = "y (in millions)")

ggplot с осью Y в миллионах

0 голосов
/ 14 августа 2019

Я считаю scales::unit_format() более читабельным:

library(ggplot2)
library(dplyr)
library(scales)

as.data.frame(
  list(x = c(0, 200, 100), 
       y = c(7500000, 10000000, 2000000))) %>%
  mutate(y = y / 10^6) %>%
  ggplot(aes(x, y)) +
  geom_point() +
  expand_limits(x = c(0, NA), y = c(0, NA)) +
  scale_y_continuous(labels = unit_format(unit = "M"))
0 голосов
/ 02 октября 2018

Я думаю, что вы можете просто вручную установить labels & breaks

library(ggplot2)

ylab <- c(2.5, 5.0, 7.5, 10)

ggplot(as.data.frame(list(x = c(0, 200, 100), y = c(7500000, 10000000, 2000000))), 
       aes(x = x, y = y)) +
  geom_point() +
  expand_limits(x = c(0, NA), y = c(0, NA)) +
  scale_y_continuous(labels = paste0(ylab, "M"),
                     breaks = 10^6 * ylab
  )

Создано в 2018-10-01 представьте пакет (v0.2.1.9000)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...