2

我正在尝试在 rbokeh 中生成直方图。

直接方法ly_hist会导致意外计数(下图,顶部)。间接方法ly_bar给出了一个未按因子水平排序的 x 轴(下图,底部)。

rbokeh

在此处输入图像描述

ggplot2给出预期的结果。

在此处输入图像描述

代码:

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 轴以正确的顺序排序?

4

1 回答 1

1

ly_hist函数将数据视为连续数据,因此将其分箱,因此获得的输出ly_hist应该是预期的。

对于ly_bar,您可以通过将xlim参数指定为 来控制 x 轴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()业务),这些将在未来的更新中得到解决。

于 2016-10-24T13:21:31.280 回答