如何在 r highcharter 中显示栏旁边的标签?

How can I show the label next to the bar in r highcharter?

我正在尝试创建一个条形图,其中 x 轴标签位于条形旁边。 我想要的结果类似于:

(来自:HighCharts Place Label on Bar

但是,有两点不同:

我试过偏移标签,但由于我不希望它们位于固定位置,而是位于相对于条形的位置,所以这不起作用。

我也尝试过使用注释,但我对这些还不够熟悉,无法使其正常工作。我的原始示例允许用户 select 特定系列。所以位置必须是动态的,但是当我使用注释时,我只能让它们出现在一个固定的点。

这是我的图表的一个非常基本的示例:

library(highcharter)

#create dataframe
data <- data.frame(
  type_1 = c("a", "a", "b", "b", "c", "c"),
  type_2 = c("1", "2", "1", "2", "1", "2"),
  n = c(5,8,10,4,7,9))
data

# create chart
highchart() %>% 
  hc_add_series(data, type = "bar", hcaes(x = type_1, group = type_2, y = n)) %>% 
  hc_plotOptions(series = list(stacking = 'normal')) %>%
  hc_xAxis(categories = unique(data$type_1)

我希望 a/b/c 不出现在图例中,而是显示在栏旁边。

感谢您提供的任何帮助!

这是一个使用注释的解决方案。

library(highcharter)
library(dplyr)
library(purrr)

data <- data.frame(
  type_1 = c("a", "a", "b", "b", "c", "c"),
  type_2 = c("1", "2", "1", "2", "1", "2"),
  n = c(5,8,10,4,7,9) )

开始定义一列 id 以唯一标识每个柱。

(data$id <- mapply(function(x,y) paste0(x,y), data$type_1, data$type_2))

# [1] "a1" "a2" "b1" "b2" "c1" "c2"

然后向数据集添加一个带有条形标签的列表。
每个柱由其 id.

引用
data <- data %>%
  mutate(labels = map(1:nrow(.), function(k) {
       list(point=as.character(id[k]), text=as.character(n[k]), 
            backgroundColor="red", distance=5, style=list(fontSize="16px"))
       })
  )

# This is label for the first bar
data$labels[[1]]
# $point
# [1] "a1"
# 
# $text
# [1] "5"
# 
# $backgroundColor
# [1] "red"
# 
# $distance
# [1] 5
# 
# $style
# $style$fontSize
# [1] "16px"

最后,使用注释添加标签

highchart() %>% 
  hc_add_series(data, type = "bar", hcaes(x = "type_1", group = "type_2", y = "n")) %>% 
  hc_xAxis(categories = unique(data$type_1)) %>%  
  hc_annotations( list(labels=data$labels) )

您不需要使用注释。使用 dataLabels 更容易。它们默认放置在您想要的位置,您可以使用 dataLabels.formatter 在其中显示任何您想要的内容。 当然,您现在可以禁用 xAxis 标签。

这是一个示例(我从中定义了一个数组 labels 和 return,但是您可以 return 来自 的值type_1 列表):

library(highcharter)

#create dataframe
data <- data.frame(
  type_1 = c("a", "a", "b", "b", "c", "c"),
  type_2 = c("1", "2", "1", "2", "1", "2"),
  n = c(5,8,10,4,7,9))
data

# create chart
highchart() %>% 
  hc_add_series(data, type = "bar", hcaes(x = type_1, group = type_2, y = n), dataLabels = list(
  enabled = TRUE,
  formatter = JS(
    "function() {
      var labels = ['a', 'b', 'c'];
      return labels[this.point.x];
    }"
  ))) %>% 
  hc_xAxis(categories = data$type_1)

API参考:https://api.highcharts.com/highcharts/series.column.dataLabels

纯 JS 示例:https://jsfiddle.net/BlackLabel/nrtax718