如何在用 highcharter 制作的箱线图中添加平均线?
How to add mean line in a boxplot made with highcharter?
我正在尝试在用 {highcharter} 制作的箱线图的工具提示中添加平均值(均值)。默认情况下,它显示:最小值、最大值、Q1、Q3 和中值。
我已经在这里问过了:
但现在我想用一条线显示平均值!
我在 JS 中看到了这个:
https://www.javaer101.com/en/article/95104988.html
我想我在下面的例子中用 {highcharter} 结束了。
非常感谢!
library(dplyr)
library(highcharter)
data(pokemon)
pokemon_graph <- pokemon %>%
group_by(type_1) %>%
mutate(moyenne = round(mean(height,na.rm = T)),1) %>%
ungroup()
dat <- data_to_boxplot(pokemon_graph, height, type_1, name = "height in meters")
highchart() %>%
hc_xAxis(type = "category") %>%
hc_add_series_list(dat) %>%
hc_tooltip(useHTML = TRUE, headerFormat = "<strong>mon graph</strong><br/>",
pointFormat = paste0("Min: {point.low}<br/>
Q1: {point.q1}<br/>
Median: {point.median}<br/>
Q3: {point.q3}<br/>
Max: {point.high}<br/>
Mean: {point.moyenne}<br/>"))
我认为您可以包装 JS 代码并在专用的 Highcharts API 上操作,它可以格式化工具提示:https://api.highcharts.com/highcharts/tooltip.formatter
在这里您可以找到一篇描述如何在 R 中完成此操作的文章:
https://www.highcharts.com/blog/tutorials/working-with-highcharts-javascript-syntax-in-r/?fbclid=IwAR3etap9WisQW43uzG7epgCWfcwy6oWBisUVOwzlADsKKb2mOO_XXojp948
Hacking Highcharter给出了一个可能的解决方案。
您可以使用均值计算创建自定义 get_box_values
函数:
get_box_values <- function(x) {
boxplot.stats(x)$stats %>% t() %>% cbind(mean(x)) %>% as.data.frame() %>%
setNames(c("low", "q1", "median", "q3", "high", "mean"))
}
然后您可以在 highcharter
命名空间中分配此函数并使用其新计算:
library(dplyr)
library(highcharter)
data(pokemon)
get_box_values <- function(x) {
boxplot.stats(x)$stats %>% t() %>% cbind(mean(x)) %>% as.data.frame() %>%
setNames(c("low", "q1", "median", "q3", "high", "mean"))
}
assignInNamespace("get_box_values", get_box_values, ns="highcharter")
dat <- data_to_boxplot(data = pokemon, height, type_1, name = "height in meters")
highchart() %>%
hc_xAxis(type = "category") %>%
hc_add_series_list(dat) %>%
hc_tooltip(useHTML = TRUE, headerFormat = "<strong>mon graph</strong><br/>",
pointFormat = paste0("Min: {point.low}<br/>
Q1: {point.q1}<br/>
Median: {point.median}<br/>
Q3: {point.q3}<br/>
Max: {point.high}<br/>
Mean: {point.mean}<br/>"))
我正在尝试在用 {highcharter} 制作的箱线图的工具提示中添加平均值(均值)。默认情况下,它显示:最小值、最大值、Q1、Q3 和中值。
我已经在这里问过了:
但现在我想用一条线显示平均值!
我在 JS 中看到了这个:
https://www.javaer101.com/en/article/95104988.html
我想我在下面的例子中用 {highcharter} 结束了。
非常感谢!
library(dplyr)
library(highcharter)
data(pokemon)
pokemon_graph <- pokemon %>%
group_by(type_1) %>%
mutate(moyenne = round(mean(height,na.rm = T)),1) %>%
ungroup()
dat <- data_to_boxplot(pokemon_graph, height, type_1, name = "height in meters")
highchart() %>%
hc_xAxis(type = "category") %>%
hc_add_series_list(dat) %>%
hc_tooltip(useHTML = TRUE, headerFormat = "<strong>mon graph</strong><br/>",
pointFormat = paste0("Min: {point.low}<br/>
Q1: {point.q1}<br/>
Median: {point.median}<br/>
Q3: {point.q3}<br/>
Max: {point.high}<br/>
Mean: {point.moyenne}<br/>"))
我认为您可以包装 JS 代码并在专用的 Highcharts API 上操作,它可以格式化工具提示:https://api.highcharts.com/highcharts/tooltip.formatter
在这里您可以找到一篇描述如何在 R 中完成此操作的文章: https://www.highcharts.com/blog/tutorials/working-with-highcharts-javascript-syntax-in-r/?fbclid=IwAR3etap9WisQW43uzG7epgCWfcwy6oWBisUVOwzlADsKKb2mOO_XXojp948
Hacking Highcharter给出了一个可能的解决方案。
您可以使用均值计算创建自定义 get_box_values
函数:
get_box_values <- function(x) {
boxplot.stats(x)$stats %>% t() %>% cbind(mean(x)) %>% as.data.frame() %>%
setNames(c("low", "q1", "median", "q3", "high", "mean"))
}
然后您可以在 highcharter
命名空间中分配此函数并使用其新计算:
library(dplyr)
library(highcharter)
data(pokemon)
get_box_values <- function(x) {
boxplot.stats(x)$stats %>% t() %>% cbind(mean(x)) %>% as.data.frame() %>%
setNames(c("low", "q1", "median", "q3", "high", "mean"))
}
assignInNamespace("get_box_values", get_box_values, ns="highcharter")
dat <- data_to_boxplot(data = pokemon, height, type_1, name = "height in meters")
highchart() %>%
hc_xAxis(type = "category") %>%
hc_add_series_list(dat) %>%
hc_tooltip(useHTML = TRUE, headerFormat = "<strong>mon graph</strong><br/>",
pointFormat = paste0("Min: {point.low}<br/>
Q1: {point.q1}<br/>
Median: {point.median}<br/>
Q3: {point.q3}<br/>
Max: {point.high}<br/>
Mean: {point.mean}<br/>"))