如何使用scala-chart创建多系列(线)图表

时间:2014-04-09 21:05:25

标签: scala charts jfreechart

我遇到了Scala-chart,这是在Scala中使用jFreeChart的一个非常好的包装器。它有几个实用程序类,用于以最小的努力生成图表。

使用scala-chart生成包含多个系列的折线图的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

scala-chart中,有几种不同的方法可以创建多系列折线图。使用哪种方式取决于您创建数据集的方式(包括使用旧版JFreeChart代码的方式):

  • (用于比较)创建单系列折线图:

    val series = for (x <- 1 to 5) yield (x,x*x)
    val chart = XYLineChart(series)
    
  • 完全根据scala集合构建一个多系列折线图(我推荐这种方式,因为它是最惯用的):

    val names: List[String] = "Series A" :: "Series B" :: Nil
    
    val data = for {
      name <- names
      series = for (x <- 1 to 5) yield (x,util.Random.nextInt(5))
    } yield name -> series
    
    val chart = XYLineChart(data)
    
  • 来自XYSeries个对象的集合:

    val names: List[String] = "Series A" :: "Series B" :: Nil
    
    def randomSeries(name: String): XYSeries =
      List.tabulate(5)(x => (x,util.Random.nextInt(5))).toXYSeries(name)
    
    val data = for (name <- names) yield randomSeries(name)
    
    val chart = XYLineChart(data)
    
  • 显式创建XYSeriesCollection对象:

    def data: XYSeriesCollection = ???
    val chart = XYLineChart(data)
    

这些是一些简单的片段,但它们应该说明数据创建是如何可能的,并且大多数情况下它归结为其中一种方式。


当前的实施(从0.4.0开始)以下列方式工作:

  • 所有图表工厂都接受data
  • 类型的任意A对象
  • 另外接受一个隐式 - 类似ToXYDataset[A]的类型类 - 它将类型data的任意A转换为工厂所基于的相应数据集
  • 在xy图表的情况下,XYSeriesXYSeriesCollectionColl[XYSeries](其中coll是scala标准库集合),Coll[(A,B)]和{{ 1}}

通过这种方式,图表工厂是完全可扩展的,可以与自定义类型的Coll[(A,Coll[(B,C)])]个实例一起使用 - 您只需为自定义类型编写自己的转换类型类实例。