2016-07-22 56 views
3

Apache ZeppelinAngularJS有很好的支持。虽然Scala和Javascript之间存在差距。是否有更好的接口为Zeppelin添加Highcharts支持

我正在尝试将Highcharts支持添加到Zeppelin来填补这个空白。主要目标是直接从Spark DataFrame绘制它。

经过几轮重构,我想出了以下接口。

github.com/knockdata/zeppelin-highcharts

这里有两个选项。 哪个选项更好?

选项A

这是绘制highcharts一个例子。

highcharts(bank, 
    "marital", 
    List("name" -> "age", "y" -> avg(col("balance")), "orderBy" -> col("age")), 
    new Title("Marital Job Average Balance").x(-20), 
    new Subtitle("Source: Zeppelin Tutorial").x(-20), 
    new XAxis("Age").typ("category"), 
    new YAxis("Balance(¥)").plotLines(Map("value"->0, "width"->1)), 
    new Tooltip().valueSuffix("¥"), 
    new Legend().layout("vertical").align("right").verticalAlign("middle") 
) 

这是没有额外选项的代码。

highcharts(bank, 
      "marital", 
      List("name" -> "age", 
      "y" -> avg(col("balance")), 
      "orderBy" -> col("age"))) 

选项B

我拿出由@ honnix的回答与鼓舞人心的这个选项。它有更多的语法糖。

highcharts(bank).series("marital") 
    .data("name" -> "age", "y" -> avg(col("balance"))) 
    .orderBy(col("age")) 
    .title(Title("Marital Job Average Balance").x(-20)) 
    .subtitle(Subtitle("Source: Zeppelin Tutorial").x(-20)) 
    .xAxis(XAxis("Age").typ("category")) 
    .yAxis(YAxis("Balance(¥)").plotLines("value"->0, "width"->1)) 
    .tooltip(Tooltip().valueSuffix("¥")) 
    .legend(Legend().layout("vertical").align("right").verticalAlign("middle")) 
    .plot 

没有选择简单的情节将是

highcharts(bank).series("marital") 
    .data("name" -> "age", "y" -> avg(col("balance"))) 
    .orderBy(col("age")) 
    .plot 

,将在此生成的图表。

Marital Job Average Balance

+0

说实话,我已经阅读过它,我仍然在想它。我还没有完全意识到你所期望的答案。 :) – eliasah

+0

我前几天写了类似于R的东西。我正在考虑平滑,过滤线条,聚焦(或缩放)你不能这样做与ggplot2 – eliasah

+0

@eliasah我添加更多的细节问题。我想问一下它是否一般和简单。任何方式来改善它? –

回答

1

这将是很好的有某种链接方法的参数来传递的,因为把几个列表一起在一个应用()方法是很难读一点点。

+0

你的意思是使用类作为参数有链式的方法? –

+0

这与使用setters大致相同。像高层建筑(银行)。 seriesCol(...)。 colDefs(...)。但无论如何,这只是语法糖。我不熟悉highcharts,既不是齐柏林飞艇。 – honnix

相关问题