使用 jfreechart 绘制 scala 数组

Plot scala arrays with jfreechart

我有 2 个 Scala 数组,我想将它们绘制成 x,y 图。

我听说 jfreechart 是在 scala 中绘图的不错选择。 我认为绘制它们的正确命令是 XYPlot 但我该如何使用它?

  val x = Array(1,2,3,4,5,6,7,8,9,10)
    val y = x.map(_*2)
import org.jfree.chart.plot.XYPlot

with python matplotlib 我会用 plot(x,y)

您需要将数据放入 DataSet,然后使用 ChartFrame 显示图表。

import org.jfree.chart._
import org.jfree.data.xy._

val x = Array[Double](1,2,3,4,5,6,7,8,9,10)
val y = x.map(_*2)
val dataset = new DefaultXYDataset
dataset.addSeries("Series 1",Array(x,y))

val frame = new ChartFrame(
  "Title",
  ChartFactory.createScatterPlot(
    "Plot",
    "X Label",
    "Y Label",
    dataset,
    org.jfree.chart.plot.PlotOrientation.HORIZONTAL,
    false,false,false
  )
)
frame.pack()
frame.setVisible(true)

正如之前的评论所指出的,有 scala-chart,您可以使用它获得更多 scala 惯用用法:

import scalax.chart._
import scalax.chart.api._

val xy = for (x <- 1 to 10) yield (x,x*2)

val chart = XYLineChart(xy)

chart.show()

目前还没有像 matplotlib/Matlab/Mathematica 提供的 DSL,但我们总是欢迎贡献 ;)

然而,如果没有专注于快速绘制一些数据的 DSL,上面的语法是你能做的最好的。

注意: Array 没有自动转换,这就是为什么该示例使用 for 循环,支持所有标准 Scala 集合。