如何在rbokeh中制作直方图?

3
我正在尝试在rbokeh中生成直方图。 直接使用“ly_hist”会导致计数出现意外情况(如下图顶部)。间接方法“ly_bar”提供的x轴未按因子级别排序(如下图底部)。 “ggplot2”提供了预期结果。
代码:

rbokeh

enter image description here

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)

Q:(1)如何使用rbokeh生成直方图,以产生预期结果(与ggplot2相同),(2)如何使x轴按正确顺序排序?


1
你为什么认为rbokeh直方图不正确? - Hong Ooi
我的意思是输出是“意外”的。我将绘图与“y”对象进行比较(请参见代码)和ggplot结果。 - Henk
好的,你的问题(1)是“如何使用rboken生成正确的直方图”,这意味着它一开始是不正确的。无论如何,你可以尝试调整ly_hist的参数,这些参数与hist完全相同。 - Hong Ooi
1
这就是为什么统计学家倾向于使用核密度图而不是直方图的原因。ly_hist的输出没有问题,说明直方图对于条形箱的放置非常敏感。但是所有人都仍然使用直方图,包括统计学家。 - Hong Ooi
我已经尝试过了。你有什么建议? - Henk
1个回答

1
ly_hist函数将数据视为连续的并进行分组,因此应该预期得到ly_hist的输出结果。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接