【问题标题】:Multiple series in drilldown钻取中的多个系列
【发布时间】:2018-09-27 06:16:50
【问题描述】:

我正在 R 中创建一个向下钻取图,并希望其中一个图层成为具有多个组的折线图。

我已经弄清楚了如何创建折线图,但我似乎无法从单个系列向下钻取到多个系列。 如果我在同一个 id 上链接两个系列(从我在 javascript 上读到的想法),只会出现第二个系列。

知道如何进行吗?

编辑 * 更新代码

df <- data_frame(
  name = c("Animals", "Fruits", "Cars"),
  y = c(5, 2, 4),
  drilldown = tolower(name)
)

df

dfan <- data_frame(
  name = c("Cats", "Dogs", "Cows", "Sheep", "Pigs"),
  value = c(4, 3, 1, 2, 1)
)

dfru <- data_frame(
  name = c("Apple", "Pear", "Orange"),
  value = c(4, 3, 1)
)

dfcar <- data_frame(
  name = c("Toyota", "Opel", "Volkswagen"),
  value = c(4, 2, 2)
)

dfcar2 <- data_frame(
  name = c("Toyota", "Opel", "Volkswagen"),
  value = c(6, 7, 2)
)


car_series = merge(dfcar, dfcar2, by = "name")

hc <- highchart() %>%
  hc_chart(type = "column",
           events = list(
             click = JS(fn))) %>%
  hc_title(text = "Basic drilldown") %>%
  hc_xAxis(type = "category") %>%
  hc_legend(enabled = FALSE) %>%
  hc_plotOptions(
    series = list(
      boderWidth = 0,
      dataLabels = list(enabled = TRUE)
    )
  ) %>%
  hc_add_series(
    data = df,
    name = "Things",
    colorByPoint = TRUE
  )

hc <- hc %>%
  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(
        id = "animals",
        data = list_parse2(dfan)
      ),
      list(
        id = "fruits",
        data = list_parse2(dfru)
      ),
      list(
        id = "cars",
        type = "line",
        data = list_parse2(car_series)
      )
    )
  )

hc


fn <-"function () {
var chart = Highcharts.charts[0];
var drilldown = this.drilldown;
var len = chart.series.length;
var name = null, 
categories = drilldown.categories, 
data = drilldown, 
type = drilldown.type;
chart.xAxis[0].setCategories(categories);
for(var i = 0; i < len; i++){
chart.series[0].remove();
}

if(data.series){
for( i = 0; i < data.series.length; i ++ ){
chart.addSeries({
name: data.series[i].name,
data: data.series[i].data,
type: data.series[i].type,
});
}
} else {
chart.addSeries({
name: name,
data: data,
type: type,

});
}
} 
"

【问题讨论】:

  • 当我单击第一个图表中的三个矩形中的每一个时,我得到两个箱线图和一个折线图(来自绿色汽车矩形)。这有什么不正确的?
  • 嗨,我希望折线图有两条线,而不是一条 - 我希望它是一个多系列。
  • 示例已编辑。谢谢
  • 我基本上想在 R 中执行此操作:jsfiddle.net/49q18Lp3

标签: r highcharts drilldown


【解决方案1】:

实际上,您只需将示例中的代码压缩并粘贴到chart.events.drilldown 事件处理程序上的JS() R 函数。代码如下:

drilldown = JS("function(e) {if(!e.seriesOptions){var chart=this,drilldowns={'Animals':{name:'Animals',data:[['Cows',2],['Sheep',3]]},'Animals2':{name:'Animals',color:'#f00',data:[['Cows',22],['Sheep',13]]},'Fruits':{name:'Fruits',data:[['Apples',5],['Oranges',7],['Bananas',2]]},'Fruits2':{name:'Fruits',color:'red',data:[['Apples',15],['Oranges',17],['Bananas',22]]},'Cars':{name:'Cars',data:[['Toyota',1],['Volkswagen',2],['Opel',5]]},'Cars2':{name:'Cars',color:'#bada55',data:[['Toyota',11],['Volkswagen',21],['Opel',15]]}},series=[drilldowns[e.point.name],drilldowns[e.point.name+'2']];chart.addSingleSeriesAsDrilldown(e.point,series[0]);chart.addSingleSeriesAsDrilldown(e.point,series[1]);chart.applyDrilldown()}}")

我在我的 R Studio 环境中进行了测试,它运行良好。

亲切的问候!

【讨论】:

  • 嗨,丹尼尔,感谢您的回复,非常感谢。我也在尝试对更大的数据集执行此操作,并且无法在函数中定义我的 df。有没有办法编写一个只处理单/多系列的java脚本函数。要输入 R highcharter 'main' 图表还是输入 hc_drilldown 参数?谢谢!
  • 嗨,丹尼尔,感谢您的回复,非常感谢。我也在尝试对更大的数据集执行此操作,并且无法在函数中定义我的 df。有没有办法编写一个只处理单/多系列的java脚本函数。要输入 R highcharter 'main' 图表还是输入 hc_drilldown 参数?谢谢!
  • 请尝试在您提供的示例中实现它,然后复制drilldown()函数的整个主体(当然,如果它在JSFiddle中如您所愿),找到一些JS代码在线压缩器,然后转换代码。就是这样。
  • 丹尼尔,非常感谢您的帮助。最后一个问题,我试图在 JS 函数中使用数据系列名称(即 dfan、dfcar),而不是在 JS 函数中创建数据系列,只是放置 data:dfan 不起作用。亲切的问候
  • 这取决于您如何尝试。我怀疑它不起作用,因为它只是一个字符串,所以如果你试图用一些 R 语法连接那个字符串,它不会给你预期的效果。解决问题的方法是使用paste() R 方法,该方法接受n 个参数,并将其连接到一个字符串。例如,如果您要使用名称定义 names 数组,您可以像这样访问它:drilldown = JS(paste("function(e) {if(!e.seriesOptions){var chart=this,drilldowns={", names[1][1], ":{name:", names[1][1] ... [...] 等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2019-05-21
  • 2018-03-30
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多