{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Customizing figures\n", "\n", "Sometimes, even though relatively customizeable, the `plot` method of `scipp` is not flexible enough for one's needs. In this section, we explore how the figures produced by the `scipp.plot` function can be further modified.\n", "\n", "## Modifying the returned Plot object\n", "\n", "There are two ways of customizing `scipp` figures. The first one is to first create a default figure using the `plot` function, and then modifying its contents.\n", "\n", "The `plot` commands returns an object which is represented in a notebook as a figure (or multiple figures) using the `_ipython_display_` property.\n", "This object can subsequently be modified post-creation." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipp as sc" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "N = 60\n", "M = 5\n", "d = sc.Dataset()\n", "d['noise'] = sc.Variable(dims=['x', 'tof'], values=10.0*np.random.rand(M, N))\n", "d.coords['tof'] = sc.Variable(dims=['tof'],\n", " values=np.arange(N+1).astype(np.float64),\n", " unit=sc.units.us)\n", "d.coords['x'] = sc.Variable(dims=['x'], values=np.arange(M).astype(np.float64),\n", " unit=sc.units.m)\n", "out = sc.plot(d, projection=\"1d\")\n", "out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `out` object is a `Plot` object which is made up of several pieces:\n", "- some `widgets` that are used to interact with the displayed figure via buttons and sliders to control slicing of higher dimensions or flipping the axes of the plot\n", "- a `view` which contains a `figure` and is the visual interface between the user and the data\n", "- in the case of 1D and 3D plots, the `Plot` object also contains a `panel` which provides additional control widgets\n", "\n", "Each one of these pieces can individually be displayed in the notebook.\n", "For instance, we can display the `widgets` of the 2D image by doing" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "out.widgets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and they are still connected to the figure above.\n", "\n", "It is also possible to customize figures such as changing the figure title or the axes labels by accessing the underlying matplotlib axes:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "out.ax.set_title('This is a new title!')\n", "out.ax.set_xlabel('My new Xaxis label')\n", "out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A line color may be modified by accessing the underlying axes and lines using the Matplotlib API\n", "(although we do recommend that changing line styles should instead be done by passing arguments to the `plot` command,\n", "as shown [here](plotting-1d-data.ipynb#Customizing-linestyles,-markers-and-colors)):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "out.ax.get_lines()[0].set_color('red')\n", "out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "