aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2012-11-06 12:25:47 +0100
committerJakob Odersky <jodersky@gmail.com>2012-11-06 12:25:47 +0100
commitb6c4fd039f1c8904b6342260911f36f49041466e (patch)
tree09dbd184ff208ec9b13daaf7e80450ee6ab2e5ad
parent96d06b8c26d0773c0dcef737e2541ebcd104dc60 (diff)
downloadscalam-b6c4fd039f1c8904b6342260911f36f49041466e.tar.gz
scalam-b6c4fd039f1c8904b6342260911f36f49041466e.tar.bz2
scalam-b6c4fd039f1c8904b6342260911f36f49041466e.zip
add axis scale support
-rw-r--r--src/main/scala/scalam/plotting/Axis.scala5
-rw-r--r--src/main/scala/scalam/plotting/Plot.scala16
-rw-r--r--src/main/scala/scalam/plotting/Plotter.scala6
-rw-r--r--src/main/scala/scalam/plotting/scale/scales.scala7
4 files changed, 26 insertions, 8 deletions
diff --git a/src/main/scala/scalam/plotting/Axis.scala b/src/main/scala/scalam/plotting/Axis.scala
new file mode 100644
index 0000000..400e2bb
--- /dev/null
+++ b/src/main/scala/scalam/plotting/Axis.scala
@@ -0,0 +1,5 @@
+package scalam.plotting
+
+import scale._
+
+case class Axis(label: String, scale: Scale = Lin) \ No newline at end of file
diff --git a/src/main/scala/scalam/plotting/Plot.scala b/src/main/scala/scalam/plotting/Plot.scala
index 232f95f..8f8c996 100644
--- a/src/main/scala/scalam/plotting/Plot.scala
+++ b/src/main/scala/scalam/plotting/Plot.scala
@@ -11,8 +11,8 @@ import scala.language.implicitConversions
class Plot(
val dataSets: Seq[DataSet],
title: String,
- xLabel: String,
- yLabel: String,
+ xAxis: Axis,
+ yAxis: Axis,
grid: Boolean = true,
legend: Boolean = true,
fontSize: Int = 10,
@@ -77,8 +77,8 @@ class Plot(
roots += m.grid(this.grid)
roots += m.fontSize(this.fontSize)
roots += m.title(this.title)
- roots += m.xLabel(this.xLabel)
- roots += m.yLabel(this.yLabel)
+ roots ++= m.xAxis(this.xAxis)
+ roots ++= m.yAxis(this.yAxis)
roots ++= plots
roots += m.legend(dataSets)
@@ -114,8 +114,12 @@ object Plot {
def hold(b: Boolean) = Function(Identifier("hold"), if (b) On else Off)
def grid(show: Boolean) = Function(Identifier("grid"), if (show) On else Off)
def title(s: String) = Function(Identifier("title"), StringLiteral(s))
- def xLabel(s: String) = Function(Identifier("xlabel"), StringLiteral(s))
- def yLabel(s: String) = Function(Identifier("ylabel"), StringLiteral(s))
+ def xAxis(x: Axis) = Seq(
+ Function(Identifier("xlabel"), StringLiteral(x.label)),
+ Function(Identifier("set"), Variable(Identifier("gca")), StringLiteral("xscale"), x.scale.expression))
+ def yAxis(x: Axis) = Seq(
+ Function(Identifier("ylabel"), StringLiteral(x.label)),
+ Function(Identifier("set"), Variable(Identifier("gca")), StringLiteral("yscale"), x.scale.expression))
def fontSize(size: Int) = Function(Identifier("set"), Variable(Identifier("gca")), StringLiteral("fontsize"), IntLiteral(size))
def load(id: Identifier, path: Path) = Assign(id, Function(Identifier("load"), StringLiteral(path.path)))
def plot(dataSet: Identifier, styleElements: Seq[StyleElement]) = {
diff --git a/src/main/scala/scalam/plotting/Plotter.scala b/src/main/scala/scalam/plotting/Plotter.scala
index 199827c..0f9c151 100644
--- a/src/main/scala/scalam/plotting/Plotter.scala
+++ b/src/main/scala/scalam/plotting/Plotter.scala
@@ -4,12 +4,14 @@ import scalam.m._
import scalam.m.ast._
import scalam.m.interpretation.MInterpreter
import scalax.file.Path
+import scalam.plotting.scale.Scale
+import scalam.plotting.scale.Lin
trait Plotter { self: MInterpreter =>
import Plotter._
- def plot(dataSets: Seq[DataSet], title: String, x: String, y: String, grid: Boolean = true, legend: Boolean = true)(implicit styles: Seq[Style[StyleElement]] = defaultStyles, fontSize: FontSize = defaultFontSize) = {
- val plot = new Plot(dataSets, title, x, y, grid, legend, styles = styles, fontSize = fontSize.fontSize)
+ def plot(dataSets: Seq[DataSet], title: String, x: String, y: String, scales: (Scale, Scale) = (Lin, Lin), grid: Boolean = true, legend: Boolean = true)(implicit styles: Seq[Style[StyleElement]] = defaultStyles, fontSize: FontSize = defaultFontSize) = {
+ val plot = new Plot(dataSets, title, Axis(x, scales._1), Axis(y, scales._2), grid, legend, styles = styles, fontSize = fontSize.fontSize)
val path = Path(Identifier.makeValid(title))
scalam.io.save(plot, path)
val s = Function(Identifier("run"), StringLiteral((path / Plot.PlotFileName).path))
diff --git a/src/main/scala/scalam/plotting/scale/scales.scala b/src/main/scala/scalam/plotting/scale/scales.scala
new file mode 100644
index 0000000..2d2f4da
--- /dev/null
+++ b/src/main/scala/scalam/plotting/scale/scales.scala
@@ -0,0 +1,7 @@
+package scalam.plotting.scale
+
+import scalam.m.ast._
+
+trait Scale {def expression: Expression}
+case object Lin extends Scale {def expression = StringLiteral("lin")}
+case object Log extends Scale {def expression = StringLiteral("log")} \ No newline at end of file