{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Datetime handling\n", "\n", "This notebook illustrates the behavior of the datetime tick formatter,\n", "depending on duration of the displayed time range.\n", "\n", "The formatter attempts to automatically adjust the precision of the tick labels for optimal readbility,\n", "while retaining all the information necessary.\n", "This involves attaching a time offset to the axis label (`time` in the examples below),\n", "as well as inserting additional date or time indicators below ticks,\n", "when more than one date or time are present on the same axis." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import scipp as sc\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More than 100 years" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "time = sc.array(dims=['time'], values=np.arange(np.datetime64('1907-11-20T23:58:17'),\n", " np.datetime64('2017-03-01T00:05:17'), 1000000))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 100 years" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2010-11-20T23:58:17'),\n", " np.datetime64('2017-03-01T00:05:17'), 100000))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 years" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-01-20T23:58:17'),\n", " np.datetime64('2017-12-01T00:05:17'), 10000))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 6 months" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-01-20T23:58:17'),\n", " np.datetime64('2017-05-01T00:05:17'), 10000))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 days" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# standard case\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-06-17T00:58:17'),\n", " np.datetime64('2017-06-17T18:05:17'), 100))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# date change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-06-17T03:58:17'),\n", " np.datetime64('2017-06-18T10:05:17'), 1000))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 hours" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# standard case\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:58:17'),\n", " np.datetime64('2017-03-16T21:15:17'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# date change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-17T23:58:17'),\n", " np.datetime64('2017-03-18T00:05:17'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 minutes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# standard case\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.500'),\n", " np.datetime64('2017-03-16T20:53:59.010'), 100))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# date change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T23:58:17.666'),\n", " np.datetime64('2017-03-17T00:02:10.532'), 100))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 seconds" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# standard case\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.200'),\n", " np.datetime64('2017-03-16T20:50:17.810'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# time change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.200'),\n", " np.datetime64('2017-03-16T20:50:18.810'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# date change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T23:59:59.500'),\n", " np.datetime64('2017-03-17T00:00:01.010'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 milliseconds" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# standard case\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.123456'),\n", " np.datetime64('2017-03-16T20:50:17.127000'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# time change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.998756'),\n", " np.datetime64('2017-03-16T20:50:18.002122'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# date change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T23:59:59.998756'),\n", " np.datetime64('2017-03-17T00:00:00.002122'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Less than 4 microseconds" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# standard case\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.123456789'),\n", " np.datetime64('2017-03-16T20:50:17.123458000'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# time change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T20:50:17.999998789'),\n", " np.datetime64('2017-03-16T20:50:18.000002000'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# date change\n", "time = sc.array(dims=['time'], values=np.arange(np.datetime64('2017-03-16T23:59:59.999998789'),\n", " np.datetime64('2017-03-17T00:00:00.000002000'), 10))\n", "data = sc.DataArray(data=sc.array(dims=['time'], values=np.random.rand(time.sizes['time'])),\n", " coords={'time':time})\n", "data.plot()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 4 }