我正在使用highcharter绘制饼图。当鼠标悬停在每个切片上时,它仅显示一个值,但是我想添加另一个值,使其显示两个!
这是一个示例代码:
在我的代码中,您看到它仅使用A列和B列来绘制数据,但是当鼠标悬停在切片上时,我希望它显示C列作为附加信息。
library(highcharter)
A <- c("a", "b", "c", "d")
B <- c(4, 6, 9, 2)
C <- c(23, 26, 13, 15)
df <- data.frame(A, B, C)
highchart() %>%
hc_chart(type = "pie") %>%
hc_add_series_labels_values(labels = df$A, values = df$B)%>%
hc_tooltip(crosshairs = TRUE, borderWidth = 5, sort = TRUE, shared = TRUE, table = TRUE,
pointFormat = paste('<b>{point.percentage:.1f}%</b>')
) %>%
hc_title(text = "ABC",
margin = 20,
style = list(color = "#144746", useHTML = TRUE))
最佳答案
据我所知,@ ewolden提出的解决方案在highcharter
中不起作用。
用于为highcharter
饼图的工具提示设置其他信息的简单灵活的解决方案如下:
library(highcharter)
A <- c("a", "b", "c", "d")
B <- c(4, 6, 9, 2)
C <- c(23, 26, 13, 15)
df <- data.frame(A, B, C)
# A modified version of the "hc_add_series_labels_values" function
# The "text" input is now available
myhc_add_series_labels_values <- function (hc, labels, values, text, colors = NULL, ...)
{
assertthat::assert_that(is.highchart(hc), is.numeric(values),
length(labels) == length(values))
df <- dplyr::data_frame(name = labels, y = values, text=text)
if (!is.null(colors)) {
assert_that(length(labels) == length(colors))
df <- mutate(df, color = colors)
}
ds <- list_parse(df)
hc <- hc %>% hc_add_series(data = ds, ...)
hc
}
# Set the "text" input in myhc_add_series_labels_values
# point.text is now available inside pointFormat of hc_tooltip
highchart() %>%
hc_chart(type = "pie", data=df) %>%
myhc_add_series_labels_values(labels=A, values=B, text=C) %>%
hc_tooltip(crosshairs=TRUE, borderWidth=5, sort=TRUE, shared=TRUE, table=TRUE,
pointFormat=paste('<br><b>A: {point.percentage:.1f}%</b><br>C: {point.text}')) %>%
hc_title(text="ABC", margin=20, style=list(color="#144746", useHTML=TRUE))
使用此解决方案,我们可以在工具提示中打印两个或多个变量的内容。下面,我们在
D
数据集中添加变量df
并在工具提示中将其可视化:D <- c("Mars", "Jupiter", "Venus", "Saturn")
df <- data.frame(A, B, C, D)
txt <- paste("C:",C," <br>D:", D)
highchart() %>%
hc_chart(type="pie", data=df) %>%
myhc_add_series_labels_values(labels=A, values=B, text=txt) %>%
hc_tooltip(crosshairs=TRUE, borderWidth=5, sort=TRUE, shared=TRUE, table=TRUE,
pointFormat=paste('<br><b>A: {point.percentage:.1f}%</b><br>{point.text}')) %>%
hc_title(text = "ABC", margin = 20, style = list(color = "#144746", useHTML = TRUE))