scala-chart
is a Scala library for creating and working with charts. It wraps JFreeChart, much
like scala-swing
does with the original javax.swing
package. This project is released under the
same license as JFreeChart, LGPL v3+, to make them fully license-compatible.
This is a fork from github.com/wookietreiber/scala-chart, into
my own name space de.sciss.chart
and publishing to a separate Maven artifact with group-id de.sciss
.
The original author is Christian Krause.
Below is the original read-me, only adapted to reflect the changes in package names.
Checkout the API by clicking on the scaladoc badge above.
Add the following to your sbt build:
libraryDependencies += "de.sciss" %% "scala-chart" % "0.8.0"
In case exporting to PDF is required, also add iText to your dependencies:
libraryDependencies += "com.itextpdf" % "itextpdf" % "5.5.13"
In case exporting to SVG is required, also add JFreeSVG to your dependencies:
libraryDependencies += "org.jfree" % "jfreesvg" % "3.4"
All high-level convenience can be imported with the all you can eat import:
import de.sciss.chart.api._
For more and more a la carte imports, have a look at the module package for various
selfless traits. There is also a module containing everything the api
import does which can be
used in applications directly:
object MyChartApp extends App with de.sciss.chart.module.Charting {
val data = for (i <- 1 to 5) yield (i,i)
val chart = XYLineChart(data)
chart.saveAsPNG("/tmp/chart.png")
}
Creating charts is as simple as using one of the many chart factories, which differ from the JFreeChart ones in the aspect, that they make heavy use of default arguments, so you have to type as less as possible:
val data = for (i <- 1 to 5) yield (i,i)
val chart = XYLineChart(data)
There are also some enrichments for the charts themselves to display them in a window or save them to disk:
chart.show(title = "My Chart of Some Points")
chart.saveAsPNG("/tmp/chart.png")
chart.saveAsJPEG("/tmp/chart.jpg")
chart.saveAsPDF("/tmp/chart.pdf")
chart.saveAsSVG("/tmp/chart.svg")
You can also do some animations, i.e. perform live updates on your datasets:
val series = new XYSeries("f(x) = sin(x)")
val chart = XYLineChart(series)
chart.show()
for (xi <- -40 to 40) {
swing.Swing onEDT {
val x = xi * 0.1
series.add(x, math.sin(x))
}
Thread.sleep(50)
}