我遇到了Scala-chart,这是在Scala中使用jFreeChart的一个非常好的包装器。它有几个实用程序类,用于以最小的努力生成图表。
使用scala-chart生成包含多个系列的折线图的最佳方法是什么?
答案 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
转换为工厂所基于的相应数据集XYSeries
,XYSeriesCollection
,Coll[XYSeries]
(其中coll是scala标准库集合),Coll[(A,B)]
和{{ 1}} 通过这种方式,图表工厂是完全可扩展的,可以与自定义类型的Coll[(A,Coll[(B,C)])]
个实例一起使用 - 您只需为自定义类型编写自己的转换类型类实例。