2016-10-20 4 views
2

Я пытаюсь создать гистограмму в rbokeh.Как я могу сделать гистограмму в rbokeh?

Прямой подход ly_hist приводит к неожиданным подсчетам (рис. Ниже, сверху). Косвенный подход ly_bar дает ось x, которая не сортируется по уровню фактора (рис. Ниже, внизу).

rbokeh

enter image description here

ggplot2 дает ожидаемые результаты.

enter image description here

Код:

library(data.table) 
library(rbokeh) 
library(ggplot2) 

# generate data ============== 
set.seed(123) 
x = data.table(
    hour = sample.int(n = 24, size = 100, replace = T) 
) 

# summarize 
y = x[, .N, keyby = hour] 

# ggplot ====================== 
theme_set(theme_bw()) 

g1 = ggplot(x) + 
    geom_histogram(aes(hour), bins = 24, fill = "steelblue", col = "white", alpha = 0.5) + 
    scale_x_continuous(breaks = seq(1, 24, 1)) 

g2 = ggplot(y) + 
    geom_bar(aes(hour, N), stat = "identity", fill = "steelblue", alpha = 0.5) 


# rbokeh ================== 
b1 = figure() %>% 
    ly_hist(hour, data = x, breaks = 24) 

y[, hour := factor(hour)] 

b2 = figure() %>% 
    ly_bar(hour, N, data = y) 

В: (1) как можно генерировать гистограмму, используя rbokeh, который производит ожидаемый результат (как в ggplot2) и (2) как можно получить ось х должна сортироваться в правильном порядке?

+1

Что заставляет вас думать, что гистограмма rbokeh неверна? –

+0

Я имел в виду вывод _unexpected_. Я сравнил график с объектом «y» (см. Код) и результатом ggplot. – Henk

+0

Ну, ваш Q (1) «как я могу сгенерировать правильную гистограмму с помощью rboken», что подразумевает, что это было неправильно в первую очередь. В любом случае вы можете играть с аргументами 'ly_hist', которые в точности совпадают с аргументами' hist'. –

ответ

1

Функция ly_hist обрабатывает данные как непрерывные и, следовательно, заполняет их, поэтому следует ожидать выход, полученный для ly_hist.

Для ly_bar, вы можете контролировать ось х либо указав xlim аргумент figure():

figure(xlim = as.character(1:24)) %>% 
    ly_bar(hour, N, data = y) 

или обжигающе фигуру через x_range() функции:

figure() %>% 
    ly_bar(hour, N, data = y) %>% 
    x_range(as.character(1:24)) 

Также отметим, что если вы не хотите делать обобщение вперед, вы можете просто передать переменную x, и она будет подсчитывать все.

figure(xlim = as.character(1:24)) %>% 
    ly_bar(as.character(hour), data = x) 

По умолчанию, в идеале rbokeh должен соблюдать порядок уровней фактора для осей и должен быть в состоянии обрабатывать входы неожиданных типов изящнее (чтобы избежать as.character() бизнеса), и они будут рассмотрены в будущих обновлениях.

Смежные вопросы