преобразование оси ggplot2 по постоянному коэффициенту - PullRequest
13 голосов
/ 10 января 2011

На графике плотности ggplot2 (geom_density) у меня есть следующие метки оси Y

  • 0,000
  • 0,005
  • 0,010
  • 0,015
  • 0,020

Как правильно изменить их на что-то вроде

  • 0
  • 5
  • 10
  • 15
  • 20

возможно, с автоматическим добавлением «10 ^ 3 x плотности» к метке. В прошлом я просто умножал свои данные и вручную менял метку, но в этом случае данные по оси Y генерируются для меня по графику плотности.

Я знаю, что могу написать что-то вроде scale_y_continuous(trans="log10"), но не нашел способа сделать простую мультипликативную константу или определить пользовательское преобразование.

Ответы [ 2 ]

26 голосов
/ 08 августа 2012

Этот ответ устарел для ggplot2 версии 0.90. Теперь тот же формат будет указан (гораздо более аккуратно) следующим образом:

scale_y_continuous(labels=function(x)x*1000)

или если вы хотите использовать одну и ту же схему маркировки несколько раз:

formatter1000 <- function(){
  function(x)x*1000
}

scale_y_continuous(labels=formatter1000())

Обратите внимание, что если вы задаете пределы оси с помощью функций xlim и ylim, это может не сработать. Вместо этого используйте спецификацию scale_y_continuous(..., limits=c(0, 1)).

В пакете scales также имеется множество встроенных форматов, включая форматирование запятых, процентное форматирование, долларовое форматирование и форматирование научных обозначений. Подробнее см. Документацию .

Надеюсь, это кому-то поможет, потому что это изменение меня смутило!

14 голосов
/ 10 января 2011

Вы можете добавить scale_y_continuous(formatter='formatter1000') с помощью следующей функции, определенной ранее:

formatter1000 <- function(x){ 
    x*1000 
}

Обратите внимание, что приведенный выше ответ был дан полтора года назад с предыдущей версией ggplot. В последнем выпуске (0.9) ggplot приведенный выше пример не работает, попробуйте что-то вроде: scale_y_continuous(labels = formatter1000)

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