[英]Highcharter: Add a string variable into a tooltip
我一直在解決一個特定問題已有一段時間了,而Stackoverflow上現有的(非常相似的)答案都無法幫助我達到目標。
我只是想將一個字符串變量作為附加數據添加到高圖散點圖中的工具提示中。 我想要的與此問題類似: highcharter工具提示的其他數據
我已經對該問題的代碼進行了一些修改,以創建一個可行的示例。 問題是我似乎無法在工具提示中顯示字符串變量(如果它們是因素,則將其解析為數字)。
library("dplyr")
library("highcharter")
data<- data.frame(Company = c("A", "A", "A", "B", "B", "B"),
Country = as.vector(c("A", "D", "F", "B", "B", "B")),
Year = c(1,2,3,1,2,3),
Value1 = c(100, 150, 170, 160, 150, 180),
Value2 = c("hi", 1, 7, 6, 5, 4), stringsAsFactors = FALSE)
data<- data %>%
group_by(name = Company) %>%
do(data = .$Value1, Value2 = .$Value2, Country = .$Country)
series<- list_parse(data)
highchart()%>%
hc_chart(type="scatter")%>%
hc_add_series_list(series)%>%
hc_tooltip(formatter= JS("function () { return 'Company: ' +
this.series.name + ' <br /> Value1: ' + this.point.y +
'<br /> Country: ' + this.point.Country ;}"))
當我嘗試添加“ this.point.Country”時,這只會產生未定義的提示。
我也發現了這一點: R Highcharter:工具提示定制
建議將工具提示定制作為系列的一部分。 但是,當我這樣做時,當我將字符串變量傳遞給系列時,繪圖似乎完全失敗。 例如,這可行,並且還允許我將z變量傳遞到工具提示中:
Errors <- data.frame(Average_R = c(90,100,110,131),
Minimum_R = c(50, 30, 45, 65),
Plant_name = c("Place","holder","name","here"),
stringsAsFactors = F)
highchart() %>%
hc_plotOptions(scatter = list(
dataLabels = list(enabled = F),
enableMouseTracking = TRUE
)
) %>%
hc_series(
list(type = "scatter",
name = pollutant,
data = Map(c,y = round(Errors$Average_R,2), z = Errors$Minimum_R))
) %>%
hc_tooltip(formatter = JS(paste0('function() {
return "<span style=\'color:" + this.point.color + "\'>\u25CF</span> " + this.series.name + " : <b>" + this.point.y + "</b> " + this.point.z + "<br/>";
}')))
結果(沒有足夠的代表來發布直接圖像)
但是,當我將hc_series的數據參數中的z變量更改為字符串變量Plant_name時,整個繪圖將失敗。
有誰知道如何解決這個問題?
根據Nick的“ 在Highcharts上設置其他數據”系列文章中的答案,這實際上是數據表示的問題,請在此處查看他的小提琴https://jsfiddle.net/burwelldesigns/jeoL5y7s/
基本上,該系列應該是一個嵌套列表,其中您要使用的所有內容都應該在data
內部
您可能想找到一種更有效的方式來定義系列,但最終應該是這樣的:
df <- data_frame(name = c('A', 'B'))
df$data <- list(
list(
list(y = 100, Country = "A"),
list(y = 150, Country = "D"),
list(y = 170, Country = "F")),
list(
list(y = 160, Country = "B"),
list(y = 150, Country = "B"),
list(y = 180, Country = "B")))
series <- list_parse(df)
然后你的highchart代碼
highchart()%>%
hc_chart(type="scatter")%>%
hc_add_series_list(series)%>%
hc_tooltip(formatter= JS("function () { return 'Company: ' +
this.series.name + ' <br /> Value1: ' + this.point.y +
'<br /> Country: ' + this.point.Country ;}"))
更新 :use可以使用lapply
獲取所需的嵌套列表,例如,下面的示例可以處理您的數據:
注意:
我使用data_0
而不是data
以避免混淆
我將“ Value1
”列的名稱更改為y
以使highchart工作
如果需要,還可以定義x
列(嘗試取消注釋我在示例中添加的x
列)
。
data_0 <- data.frame(Company = c("A", "A", "A", "B", "B", "B"),
Country = as.vector(c("A", "D", "F", "B", "B", "B")),
Year = c(1,2,3,1,2,3),
y = c(100, 150, 170, 160, 150, 180),
# x = c(0, 1, 7, 6, 5, 4),
Value2 = c('hi', 1, 7, 6, 5, 4), stringsAsFactors = FALSE)
# use the unique group values as names for the lists
df <- data_frame(name = unique(data_0$Company))
# use nested lapplys to get nested lists
df$data <- lapply(df$name, # for each group name
function(x, data_orig, cols){
temp_df <- data_orig[data_orig$Company==x, cols] # get the data that belongs to this group
lapply(1:nrow(temp_df),
function(i){
as.list(temp_df[i,])} # make it a list
)},
data_orig = data_0, cols = c(2:5))
series <- list_parse(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.