2014-04-09 55 views
1

我遇到了Scala-chart,这是一个在Scala中使用jFreeChart的非常好的包装。它有几个实用程序类,用于以最小的努力生成图表。如何使用Scala图表创建多系列(行)图表

什么是最好的方式来生成多个系列使用斯卡拉图的折线图?

+1

实际上,它支持单系列折线图和多系列折线图(请参阅我的答案) - 图表工厂甚至不区分它们。 –

回答

2

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) 
    
  • 从集合对象:

    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的),在这样的工作:

  • 所有图表工厂除了接受A类型和
  • 的任意data对象接受隐含 - - 类型ToXYDataset[A] - 将的任意转换为工厂基于的相应数据集
  • 在xy图表的情况下再是默认的转换器XYSeriesXYSeriesCollectionColl[XYSeries](其中科尔是Scala的标准库集合),Coll[(A,B)]Coll[(A,Coll[(B,C)])]

这样的图表工厂是完全可扩展的,可与您的自定义类型的data情况下使用 - - 您只需为自定义类型编写自己的转换类型类实例。