如何在 r highcharter 中显示栏旁边的标签?
How can I show the label next to the bar in r highcharter?
我正在尝试创建一个条形图,其中 x 轴标签位于条形旁边。
我想要的结果类似于:
(来自:HighCharts Place Label on Bar)
但是,有两点不同:
我正在用 R highcharter 制作图表
我不想要栏内的标签,而是旁边的标签。它看起来应该类似于通常在条形旁边添加值的方式,请参阅 for example:
我试过偏移标签,但由于我不希望它们位于固定位置,而是位于相对于条形的位置,所以这不起作用。
我也尝试过使用注释,但我对这些还不够熟悉,无法使其正常工作。我的原始示例允许用户 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
我正在尝试创建一个条形图,其中 x 轴标签位于条形旁边。 我想要的结果类似于:
但是,有两点不同:
我正在用 R highcharter 制作图表
我不想要栏内的标签,而是旁边的标签。它看起来应该类似于通常在条形旁边添加值的方式,请参阅 for example:
我试过偏移标签,但由于我不希望它们位于固定位置,而是位于相对于条形的位置,所以这不起作用。
我也尝试过使用注释,但我对这些还不够熟悉,无法使其正常工作。我的原始示例允许用户 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