Гистограмма в логарифмическом масштабе с форматированными разрывами в ggvis

Я заинтересован в преобразовании некоторых графиков из ggplot в ggvis, но относительно мало информации о некоторых функциях ggvis.

У меня есть график битрейтов, который мне нужен, в логарифмическом масштабе с красиво отформатированными метками.

Вот код для этого в ggplot:

require(data.table)  # data.table_1.9.2
require(magrittr)    # magrittr_1.0.1
require(ggplot2)     # ggplot2_1.0.0
require(ggvis)       # ggvis_0.3.0.99

# Management requires nice labels on their graphs
format_si = function(unit="", ...) {
  # Returns a function that formats its input in SI-style (poswers of ten)
  # The function inserts the supplied unit
  function(x) {
    limits <- c(1e-24, 1e-21, 1e-18, 1e-15, 1e-12, 1e-9,  1e-6,  1e-3,  1e0,  1e3,  1e6,  1e9,  1e12,  1e15,  1e18, 1e21,  1e24)
    prefix <- c(" y",  " z",  " a",  " f",  " p",  " n",  " µ",  " m",  " ",  " k", " M", " G", " T",  " P",  " E", " Z",  " Y")
    i <- findInterval(abs(x), limits)
    i <- ifelse(i==0, which(limits == 1e0), i)
    paste(format(round(x/limits[i], 1), trim=TRUE, scientific=FALSE, ...), prefix[i], unit, sep="")
  }   
}   

# Create some sample data.
data = data.table(bitrate=rgamma(200, shape = 1.5, scale = 5e6))

# Make a wonderful ggplot2 bitmap graph.
data %>%
    ggplot(aes(bitrate)) +
    geom_bar(stat="bin", binwidth=.5, aes(y=..density..), fill="#ccccff", color="black") +
    scale_x_log10(breaks=10^(4:9), labels=format_si('bit/s')(10^(4:9)), limits=c(10^4,10^9))

ggplot bitrate

Попытка создать базовый график ggvis работает:

# Create a non-log ggvis super awesome web graph.
data.table(bitrate=rgamma(200, shape = 1.5, scale = 5e6)) %>%
    ggvis(x = ~bitrate) %>%
    compute_bin(~bitrate) %>%
    layer_rects(x = ~xmin_, x2 = ~xmax_, y=~count_, y2=0) 

Но если мы просто добавим логарифмическую шкалу, а затем бум, теперь график будет пустым:

# Try to add a log scale.
data.table(bitrate=rgamma(200, shape = 1.5, scale = 5e6)) %>%
    ggvis(x = ~bitrate) %>%
    compute_bin(~bitrate) %>%
    layer_rects(x = ~xmin_, x2 = ~xmax_, y=~count_, y2=0) %>%
    scale_numeric("x", trans="log") 

Можно ли воссоздать график ggplot в ggvis? Как насчет добавления помеченных разрывов или функции форматирования меток к осям ggvis?


person Grisby_2133    schedule 12.08.2014    source источник
comment
Передача label = s в scale_numeric() должна привести к форматированию в стиле SI.   -  person dholstius    schedule 27.11.2014


Ответы (1)


Попробуйте добавить expand = 0:

scale_numeric("x", trans = "log", expand = 0)
person dholstius    schedule 24.11.2014
comment
Хм, это все еще не работает для меня. Я использую ggvis_0.4.0.9000. Это действительно работает для вас? Какую версию ggvis вы используете? - person Grisby_2133; 26.11.2014
comment
В прошлом мне удавалось воскресить некоторые графики в логарифмическом масштабе. К сожалению, не могу проверить ваш пример в течение нескольких дней (путешествия, без R). Можно также предложить установить для диапазона значение, удобное для журнала, например, диапазон = c(1e2, 1e9), и если это не поможет, также передать override = TRUE. Все в scale_numeric(). - person dholstius; 27.11.2014
comment
Обновление: хотя это не решает исходный вопрос, у меня была опция expand = 0, которая воскресила некоторые другие графики в логарифмическом масштабе. - person Grisby_2133; 20.04.2015