- Scala for Data Science
- Pascal Bugnion
- 382字
- 2021-07-23 14:33:05
Customizing plots
We now have a curve on our chart. Let's add a few more:
scala> val f2x = sigmoid(2.0*x) f2x: breeze.linalg.DenseVector[Double] = DenseVector(3.353501304664E-4... scala> val f10x = sigmoid(10.0*x) f10x: breeze.linalg.DenseVector[Double] = DenseVector(4.24835425529E-18... scala> plt += plot(x, f2x, name="S(2x)") breeze.plot.Plot = breeze.plot.Plot@63d6a0f8 scala> plt += plot(x, f10x, name="S(10x)") breeze.plot.Plot = breeze.plot.Plot@63d6a0f8 scala> fig.refresh()
Looking at the figure now, you should see all three curves in different colors. Notice that we named the data series as we added them to the plot, using the name=""
keyword argument. To view the names, we must set the legend
attribute:
scala> plt.legend = true

Our plot still leaves a lot to be desired. Let's start by restricting the range of the x axis to remove the bands of white space on either side of the plot:
scala> plt.xlim = (-4.0, 4.0) plt.xlim: (Double, Double) = (-4.0,4.0)
Now, notice how, while the x ticks are sensibly spaced, there are only two y ticks: at 0 and 1. It would be useful to have ticks every 0.1 increment. Breeze does not provide a way to set this directly. Instead, it exposes the underlying JFreeChart Axis object belonging to the current plot:
scala> plt.yaxis org.jfree.chart.axis.NumberAxis = org.jfree.chart.axis.NumberAxis@0
The Axis
object supports a .setTickUnit
method that lets us set the tick spacing:
scala> import org.jfree.chart.axis.NumberTickUnit import org.jfree.chart.axis.NumberTickUnit scala> plt.yaxis.setTickUnit(new NumberTickUnit(0.1))
JFreeChart allows extensive customization of the Axis
object. For a full list of methods available, consult the JFreeChart documentation (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/axis/Axis.html).
Let's also add a vertical line at x=0 and a horizontal line at f(x)=1. We will need to access the underlying JFreeChart plot to add these lines. This is available (somewhat confusingly) as the .plot
attribute in our Breeze Plot
object:
scala> plt.plot org.jfree.chart.plot.XYPlot = org.jfree.chart.plot.XYPlot@17e4db6c
We can use the .addDomainMarker
and .addRangeMarker
methods to add vertical and horizontal lines to JFreeChart XYPlot
objects:
scala> import org.jfree.chart.plot.ValueMarker import org.jfree.chart.plot.ValueMarker scala> plt.plot.addDomainMarker(new ValueMarker(0.0)) scala> plt.plot.addRangeMarker(new ValueMarker(1.0))
Let's also add labels to the axes:
scala> plt.xlabel = "x" plt.xlabel: String = x scala> plt.ylabel = "f(x)" plt.ylabel: String = f(x)
If you have run all these commands, you should have a graph that looks like this:

We now know how to customize the basic building blocks of a graph. The next step is to learn how to change how curves are drawn.
- 三維圖形化C++趣味編程
- Java游戲服務器架構實戰(zhàn)
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- 可解釋機器學習:模型、方法與實踐
- Service Mesh實戰(zhàn):基于Linkerd和Kubernetes的微服務實踐
- Python機器學習算法與應用
- Qlik Sense? Cookbook
- C陷阱與缺陷
- Photoshop CC移動UI設計案例教程(全彩慕課版·第2版)
- Julia High Performance(Second Edition)
- 奔跑吧 Linux內核
- Java高手是怎樣煉成的:原理、方法與實踐
- Analytics for the Internet of Things(IoT)
- Java程序設計(項目教學版)
- Daniel Arbuckle's Mastering Python