如何在rbokeh中制作直方图?

时间:2016-10-20 12:24:24

标签: r ggplot2 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)如何按正确的顺序对x轴进行排序?

1 个答案:

答案 0 :(得分:1)

ly_hist函数将数据视为连续数据,因此对其进行分类,因此应该期望获得ly_hist的输出。

对于ly_bar,您可以通过将xlim参数指定为figure()来控制x轴:

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()业务),并且这些将在未来的更新中得到解决。