我正在尝试在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轴进行排序?
答案 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()
业务),并且这些将在未来的更新中得到解决。