如何在 highcharter 中生成因子为 y 的散点图?
How to produce scatterplot with a factor as y in highcharter?
问题:
我想用 highcharter::hchart
生成散点图,其中 y
是 factor
,x 是 date
.
显然,highcharter::hchart
"scatter"
不接受因子变量作为 y。
有什么解决办法吗?
或者 "scatter"
只是错误的图表类型?
(评论:我知道ggplotly
会是一个很好的选择,但我实际上需要一个highcharter
解决方案)
示例:
假设我想制作一个按类型 发布的时间表。
我想要一个带有 d$type
(=y-axis) 和 d$date
(=x-axis) 的散点图,highcharter
工具提示应该显示 d$title
,d$type
和 d$date
(格式正确)。
library(stringi)
library(tidyverse)
library(highcharter)
### create example data
d <- data.frame(date = sample(seq(as.Date("2001/1/1"),
as.Date("2003/1/1"),
by = "day"),
30), # Date of publication
title = stringi::stri_rand_strings(30, 5), # Title of publication
type = rep(c("book","article","tweet"),
length.out=30)) # Publication type
glimpse(d)
#>Observations: 30
#>Variables: 3
#>$ date <date> 2001-02-21, 2001-12-31, 2002-09-02, 2002-12-11, 2001-...
#>$ title <fct> NvHuI, 81HoS, TsyWs, KbTT2, I2p4f, ASasv, HuclA, cmihb...
#>$ type <fct> book, article, tweet, book, article, tweet, book, arti...
### ggplot2: static plot
ggplot(d, aes(x=date,
y=type)) +
geom_point(aes(colour=type),
alpha=0.5,
size = 3) +
scale_x_date(date_labels = "%m / %Y") +
theme_light() +
theme(panel.grid.minor.x = element_blank())
ggplot2::geom_points
在这里做得很好。
但是,我希望图表具有交互性(工具提示显示标题等...)所以我会尝试使用 highcharter::hchart
:
### highcharter: interactive plot
# A.) NOT WORKING, because y is a factor
hchart(d,
"scatter",
hcaes(x = date,
y = type,
group = type))
显然,highcharter::hchart "scatter"
不接受 factor
作为 y
。
我实现此功能的唯一方法是将 d$type
转换为数字...但是 xAxisLabels
和工具提示是错误的...
# B.) WORKING, because y is numeric
hchart((d %>%
mutate(typenum = as.numeric(type))),
"scatter",
hcaes(x = date,
y = typenum,
group = typenum))
另一种选择是:
lvls <- d %>% pull(type) %>% levels()
d %>%
mutate(typenum = as.numeric(type) - 1) %>%
hchart("scatter", hcaes(x = date, y = typenum, group = type)) %>%
hc_yAxis(categories = lvls)
注意 as.numeric(type) - 1
,这是因为 Javascript 然后 highcharts 是 0-index。所以当我们添加类别名称时,highcharts 将从 0 开始。
问题:
我想用 highcharter::hchart
生成散点图,其中 y
是 factor
,x 是 date
.
显然,highcharter::hchart
"scatter"
不接受因子变量作为 y。
有什么解决办法吗?
或者 "scatter"
只是错误的图表类型?
(评论:我知道ggplotly
会是一个很好的选择,但我实际上需要一个highcharter
解决方案)
示例:
假设我想制作一个按类型 发布的时间表。
我想要一个带有 d$type
(=y-axis) 和 d$date
(=x-axis) 的散点图,highcharter
工具提示应该显示 d$title
,d$type
和 d$date
(格式正确)。
library(stringi)
library(tidyverse)
library(highcharter)
### create example data
d <- data.frame(date = sample(seq(as.Date("2001/1/1"),
as.Date("2003/1/1"),
by = "day"),
30), # Date of publication
title = stringi::stri_rand_strings(30, 5), # Title of publication
type = rep(c("book","article","tweet"),
length.out=30)) # Publication type
glimpse(d)
#>Observations: 30
#>Variables: 3
#>$ date <date> 2001-02-21, 2001-12-31, 2002-09-02, 2002-12-11, 2001-...
#>$ title <fct> NvHuI, 81HoS, TsyWs, KbTT2, I2p4f, ASasv, HuclA, cmihb...
#>$ type <fct> book, article, tweet, book, article, tweet, book, arti...
### ggplot2: static plot
ggplot(d, aes(x=date,
y=type)) +
geom_point(aes(colour=type),
alpha=0.5,
size = 3) +
scale_x_date(date_labels = "%m / %Y") +
theme_light() +
theme(panel.grid.minor.x = element_blank())
ggplot2::geom_points
在这里做得很好。
但是,我希望图表具有交互性(工具提示显示标题等...)所以我会尝试使用 highcharter::hchart
:
### highcharter: interactive plot
# A.) NOT WORKING, because y is a factor
hchart(d,
"scatter",
hcaes(x = date,
y = type,
group = type))
显然,highcharter::hchart "scatter"
不接受 factor
作为 y
。
我实现此功能的唯一方法是将 d$type
转换为数字...但是 xAxisLabels
和工具提示是错误的...
# B.) WORKING, because y is numeric
hchart((d %>%
mutate(typenum = as.numeric(type))),
"scatter",
hcaes(x = date,
y = typenum,
group = typenum))
另一种选择是:
lvls <- d %>% pull(type) %>% levels()
d %>%
mutate(typenum = as.numeric(type) - 1) %>%
hchart("scatter", hcaes(x = date, y = typenum, group = type)) %>%
hc_yAxis(categories = lvls)
注意 as.numeric(type) - 1
,这是因为 Javascript 然后 highcharts 是 0-index。所以当我们添加类别名称时,highcharts 将从 0 开始。