官术网_书友最值得收藏!

  • 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.

主站蜘蛛池模板: 龙州县| 邯郸市| 晋宁县| 贞丰县| 沙湾县| 宁波市| 保康县| 兴和县| 天祝| 临沂市| 墨江| 宜黄县| 新干县| 奈曼旗| 德钦县| 广西| 浦东新区| 胶南市| 三明市| 分宜县| 灌南县| 屯门区| 错那县| 濮阳市| 太湖县| 页游| 昭平县| 昌邑市| 仪征市| 宕昌县| 沿河| 安徽省| 红河县| 会理县| 双牌县| 漠河县| 桐柏县| 塔河县| 德保县| 武清区| 东明县|