簡體   English   中英

Highcharter:將字符串變量添加到工具提示中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM