
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "examples/plot-vector-methods.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_examples_plot-vector-methods.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_examples_plot-vector-methods.py:


=======================
Vector plotting methods
=======================

To plot vector quantities such as currents we can use a quiver plot in matplotlib.
In the `GBR4` tutorial dataset
the u and v variables contain the x and y components of the vector
for each cell in the dataset.

.. GENERATED FROM PYTHON SOURCE LINES 11-27

.. code-block:: Python


    import matplotlib.pyplot as plt
    import numpy
    import pandas
    import xarray
    from shapely import box

    import emsarray
    from emsarray import plot
    from emsarray.operations import point_extraction

    dataset = emsarray.tutorial.open_dataset('gbr4')

    surface_currents = dataset.ems.select_variables(["temp", "u", "v"]).isel(time=0, k=-1)
    surface_currents.load()






.. raw:: html

    <div class="output_subarea output_html rendered_html output_result">
    <div><svg style="position: absolute; width: 0; height: 0; overflow: hidden">
    <defs>
    <symbol id="icon-database" viewBox="0 0 32 32">
    <path d="M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z"></path>
    <path d="M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z"></path>
    <path d="M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z"></path>
    </symbol>
    <symbol id="icon-file-text2" viewBox="0 0 32 32">
    <path d="M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z"></path>
    <path d="M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
    <path d="M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
    <path d="M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
    </symbol>
    </defs>
    </svg>
    <style>/* CSS stylesheet for displaying xarray objects in notebooks */

    :root {
      --xr-font-color0: var(
        --jp-content-font-color0,
        var(--pst-color-text-base rgba(0, 0, 0, 1))
      );
      --xr-font-color2: var(
        --jp-content-font-color2,
        var(--pst-color-text-base, rgba(0, 0, 0, 0.54))
      );
      --xr-font-color3: var(
        --jp-content-font-color3,
        var(--pst-color-text-base, rgba(0, 0, 0, 0.38))
      );
      --xr-border-color: var(
        --jp-border-color2,
        hsl(from var(--pst-color-on-background, white) h s calc(l - 10))
      );
      --xr-disabled-color: var(
        --jp-layout-color3,
        hsl(from var(--pst-color-on-background, white) h s calc(l - 40))
      );
      --xr-background-color: var(
        --jp-layout-color0,
        var(--pst-color-on-background, white)
      );
      --xr-background-color-row-even: var(
        --jp-layout-color1,
        hsl(from var(--pst-color-on-background, white) h s calc(l - 5))
      );
      --xr-background-color-row-odd: var(
        --jp-layout-color2,
        hsl(from var(--pst-color-on-background, white) h s calc(l - 15))
      );
    }

    html[theme="dark"],
    html[data-theme="dark"],
    body[data-theme="dark"],
    body.vscode-dark {
      --xr-font-color0: var(
        --jp-content-font-color0,
        var(--pst-color-text-base, rgba(255, 255, 255, 1))
      );
      --xr-font-color2: var(
        --jp-content-font-color2,
        var(--pst-color-text-base, rgba(255, 255, 255, 0.54))
      );
      --xr-font-color3: var(
        --jp-content-font-color3,
        var(--pst-color-text-base, rgba(255, 255, 255, 0.38))
      );
      --xr-border-color: var(
        --jp-border-color2,
        hsl(from var(--pst-color-on-background, #111111) h s calc(l + 10))
      );
      --xr-disabled-color: var(
        --jp-layout-color3,
        hsl(from var(--pst-color-on-background, #111111) h s calc(l + 40))
      );
      --xr-background-color: var(
        --jp-layout-color0,
        var(--pst-color-on-background, #111111)
      );
      --xr-background-color-row-even: var(
        --jp-layout-color1,
        hsl(from var(--pst-color-on-background, #111111) h s calc(l + 5))
      );
      --xr-background-color-row-odd: var(
        --jp-layout-color2,
        hsl(from var(--pst-color-on-background, #111111) h s calc(l + 15))
      );
    }

    .xr-wrap {
      display: block !important;
      min-width: 300px;
      max-width: 700px;
      line-height: 1.6;
      padding-bottom: 4px;
    }

    .xr-text-repr-fallback {
      /* fallback to plain text repr when CSS is not injected (untrusted notebook) */
      display: none;
    }

    .xr-header {
      padding-top: 6px;
      padding-bottom: 6px;
    }

    .xr-header {
      border-bottom: solid 1px var(--xr-border-color);
      margin-bottom: 4px;
    }

    .xr-header > div,
    .xr-header > ul {
      display: inline;
      margin-top: 0;
      margin-bottom: 0;
    }

    .xr-obj-type,
    .xr-obj-name {
      margin-left: 2px;
      margin-right: 10px;
    }

    .xr-obj-type,
    .xr-group-box-contents > label {
      color: var(--xr-font-color2);
      display: block;
    }

    .xr-sections {
      padding-left: 0 !important;
      display: grid;
      grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;
      margin-block-start: 0;
      margin-block-end: 0;
    }

    .xr-section-item {
      display: contents;
    }

    .xr-section-item > input,
    .xr-group-box-contents > input,
    .xr-array-wrap > input {
      display: block;
      opacity: 0;
      height: 0;
      margin: 0;
    }

    .xr-section-item > input + label,
    .xr-var-item > input + label {
      color: var(--xr-disabled-color);
    }

    .xr-section-item > input:enabled + label,
    .xr-var-item > input:enabled + label,
    .xr-array-wrap > input:enabled + label,
    .xr-group-box-contents > input:enabled + label {
      cursor: pointer;
      color: var(--xr-font-color2);
    }

    .xr-section-item > input:focus-visible + label,
    .xr-var-item > input:focus-visible + label,
    .xr-array-wrap > input:focus-visible + label,
    .xr-group-box-contents > input:focus-visible + label {
      outline: auto;
    }

    .xr-section-item > input:enabled + label:hover,
    .xr-var-item > input:enabled + label:hover,
    .xr-array-wrap > input:enabled + label:hover,
    .xr-group-box-contents > input:enabled + label:hover {
      color: var(--xr-font-color0);
    }

    .xr-section-summary {
      grid-column: 1;
      color: var(--xr-font-color2);
      font-weight: 500;
      white-space: nowrap;
    }

    .xr-section-summary > em {
      font-weight: normal;
    }

    .xr-span-grid {
      grid-column-end: -1;
    }

    .xr-section-summary > span {
      display: inline-block;
      padding-left: 0.3em;
    }

    .xr-group-box-contents > input:checked + label > span {
      display: inline-block;
      padding-left: 0.6em;
    }

    .xr-section-summary-in:disabled + label {
      color: var(--xr-font-color2);
    }

    .xr-section-summary-in + label:before {
      display: inline-block;
      content: "►";
      font-size: 11px;
      width: 15px;
      text-align: center;
    }

    .xr-section-summary-in:disabled + label:before {
      color: var(--xr-disabled-color);
    }

    .xr-section-summary-in:checked + label:before {
      content: "▼";
    }

    .xr-section-summary-in:checked + label > span {
      display: none;
    }

    .xr-section-summary,
    .xr-section-inline-details,
    .xr-group-box-contents > label {
      padding-top: 4px;
    }

    .xr-section-inline-details {
      grid-column: 2 / -1;
    }

    .xr-section-details {
      grid-column: 1 / -1;
      margin-top: 4px;
      margin-bottom: 5px;
    }

    .xr-section-summary-in ~ .xr-section-details {
      display: none;
    }

    .xr-section-summary-in:checked ~ .xr-section-details {
      display: contents;
    }

    .xr-children {
      display: inline-grid;
      grid-template-columns: 100%;
      grid-column: 1 / -1;
      padding-top: 4px;
    }

    .xr-group-box {
      display: inline-grid;
      grid-template-columns: 0px 30px auto;
    }

    .xr-group-box-vline {
      grid-column-start: 1;
      border-right: 0.2em solid;
      border-color: var(--xr-border-color);
      width: 0px;
    }

    .xr-group-box-hline {
      grid-column-start: 2;
      grid-row-start: 1;
      height: 1em;
      width: 26px;
      border-bottom: 0.2em solid;
      border-color: var(--xr-border-color);
    }

    .xr-group-box-contents {
      grid-column-start: 3;
      padding-bottom: 4px;
    }

    .xr-group-box-contents > label::before {
      content: "📂";
      padding-right: 0.3em;
    }

    .xr-group-box-contents > input:checked + label::before {
      content: "📁";
    }

    .xr-group-box-contents > input:checked + label {
      padding-bottom: 0px;
    }

    .xr-group-box-contents > input:checked ~ .xr-sections {
      display: none;
    }

    .xr-group-box-contents > input + label > span {
      display: none;
    }

    .xr-group-box-ellipsis {
      font-size: 1.4em;
      font-weight: 900;
      color: var(--xr-font-color2);
      letter-spacing: 0.15em;
      cursor: default;
    }

    .xr-array-wrap {
      grid-column: 1 / -1;
      display: grid;
      grid-template-columns: 20px auto;
    }

    .xr-array-wrap > label {
      grid-column: 1;
      vertical-align: top;
    }

    .xr-preview {
      color: var(--xr-font-color3);
    }

    .xr-array-preview,
    .xr-array-data {
      padding: 0 5px !important;
      grid-column: 2;
    }

    .xr-array-data,
    .xr-array-in:checked ~ .xr-array-preview {
      display: none;
    }

    .xr-array-in:checked ~ .xr-array-data,
    .xr-array-preview {
      display: inline-block;
    }

    .xr-dim-list {
      display: inline-block !important;
      list-style: none;
      padding: 0 !important;
      margin: 0;
    }

    .xr-dim-list li {
      display: inline-block;
      padding: 0;
      margin: 0;
    }

    .xr-dim-list:before {
      content: "(";
    }

    .xr-dim-list:after {
      content: ")";
    }

    .xr-dim-list li:not(:last-child):after {
      content: ",";
      padding-right: 5px;
    }

    .xr-has-index {
      font-weight: bold;
    }

    .xr-var-list,
    .xr-var-item {
      display: contents;
    }

    .xr-var-item > div,
    .xr-var-item label,
    .xr-var-item > .xr-var-name span {
      background-color: var(--xr-background-color-row-even);
      border-color: var(--xr-background-color-row-odd);
      margin-bottom: 0;
      padding-top: 2px;
    }

    .xr-var-item > .xr-var-name:hover span {
      padding-right: 5px;
    }

    .xr-var-list > li:nth-child(odd) > div,
    .xr-var-list > li:nth-child(odd) > label,
    .xr-var-list > li:nth-child(odd) > .xr-var-name span {
      background-color: var(--xr-background-color-row-odd);
      border-color: var(--xr-background-color-row-even);
    }

    .xr-var-name {
      grid-column: 1;
    }

    .xr-var-dims {
      grid-column: 2;
    }

    .xr-var-dtype {
      grid-column: 3;
      text-align: right;
      color: var(--xr-font-color2);
    }

    .xr-var-preview {
      grid-column: 4;
    }

    .xr-index-preview {
      grid-column: 2 / 5;
      color: var(--xr-font-color2);
    }

    .xr-var-name,
    .xr-var-dims,
    .xr-var-dtype,
    .xr-preview,
    .xr-attrs dt {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      padding-right: 10px;
    }

    .xr-var-name:hover,
    .xr-var-dims:hover,
    .xr-var-dtype:hover,
    .xr-attrs dt:hover {
      overflow: visible;
      width: auto;
      z-index: 1;
    }

    .xr-var-attrs,
    .xr-var-data,
    .xr-index-data {
      display: none;
      border-top: 2px dotted var(--xr-background-color);
      padding-bottom: 20px !important;
      padding-top: 10px !important;
    }

    .xr-var-attrs-in + label,
    .xr-var-data-in + label,
    .xr-index-data-in + label {
      padding: 0 1px;
    }

    .xr-var-attrs-in:checked ~ .xr-var-attrs,
    .xr-var-data-in:checked ~ .xr-var-data,
    .xr-index-data-in:checked ~ .xr-index-data {
      display: block;
    }

    .xr-var-data > table {
      float: right;
    }

    .xr-var-data > pre,
    .xr-index-data > pre,
    .xr-var-data > table > tbody > tr {
      background-color: transparent !important;
    }

    .xr-var-name span,
    .xr-var-data,
    .xr-index-name div,
    .xr-index-data,
    .xr-attrs {
      padding-left: 25px !important;
    }

    .xr-attrs,
    .xr-var-attrs,
    .xr-var-data,
    .xr-index-data {
      grid-column: 1 / -1;
    }

    dl.xr-attrs {
      padding: 0;
      margin: 0;
      display: grid;
      grid-template-columns: 125px auto;
    }

    .xr-attrs dt,
    .xr-attrs dd {
      padding: 0;
      margin: 0;
      float: left;
      padding-right: 10px;
      width: auto;
    }

    .xr-attrs dt {
      font-weight: normal;
      grid-column: 1;
    }

    .xr-attrs dt:hover span {
      display: inline-block;
      background: var(--xr-background-color);
      padding-right: 10px;
    }

    .xr-attrs dd {
      grid-column: 2;
      white-space: pre-wrap;
      word-break: break-all;
    }

    .xr-icon-database,
    .xr-icon-file-text2,
    .xr-no-icon {
      display: inline-block;
      vertical-align: middle;
      width: 1em;
      height: 1.5em !important;
      stroke-width: 0;
      stroke: currentColor;
      fill: currentColor;
    }

    .xr-var-attrs-in:checked + label > .xr-icon-file-text2,
    .xr-var-data-in:checked + label > .xr-icon-database,
    .xr-index-data-in:checked + label > .xr-icon-database {
      color: var(--xr-font-color0);
      filter: drop-shadow(1px 1px 5px var(--xr-font-color2));
      stroke-width: 0.8px;
    }
    </style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt; Size: 4MB
    Dimensions:    (j: 180, i: 600)
    Coordinates:
        latitude   (j, i) float64 864kB -8.074 -8.107 -8.139 ... -28.56 -28.59
        longitude  (j, i) float64 864kB 142.2 142.2 142.2 ... 156.9 156.9 156.9
        time       datetime64[ns] 8B 2022-10-15T14:00:00
        zc         float64 8B 1.5
    Dimensions without coordinates: j, i
    Data variables:
        temp       (j, i) float64 864kB nan nan nan nan ... 20.9 20.92 20.93 20.93
        u          (j, i) float64 864kB nan nan nan ... -0.005159 0.03509 0.05466
        v          (j, i) float64 864kB nan nan nan nan ... 0.08804 0.08797 0.04464
    Attributes: (12/16)
        title:                           gbr4_H4p0_ABARRAr2_OBRAN2020_FG2Gv3_Dhnd
        description:                     eReefs GBR 4k grid with 64 active river ...
        paramhead:                       eReefs GBR 4k grid, with Atmospheric for...
        paramfile:                       /g/data/et4/projects/eReefs/gbr4_H4p0_AB...
        ems_version:                     v1.4.0 rev(7365)
        date_created:                    Mon Oct 21 15:47:23 2024
        ...                              ...
        bald__isPrefixedBy:              prefix_list
        metadata_link:                   https://marlin.csiro.au/geonetwork/srv/e...
        prefix_list_puv__:               https://w3id.org/env/puv#
        DODS_EXTRA.Unlimited_Dimension:  time
        history:                         Wed Jan 14 14:15:20 2026: ncks -d time,0...
        NCO:                             netCDF Operators version 5.3.6 (Homepage...</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-d30f6892-9871-4717-854b-43b48633f7ef' class='xr-section-summary-in' type='checkbox' disabled /><label for='section-d30f6892-9871-4717-854b-43b48633f7ef' class='xr-section-summary'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>j</span>: 180</li><li><span>i</span>: 600</li></ul></div></li><li class='xr-section-item'><input id='section-d0d5eb1c-f884-4e7b-87c3-200ce31ee973' class='xr-section-summary-in' type='checkbox' checked /><label for='section-d0d5eb1c-f884-4e7b-87c3-200ce31ee973' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>latitude</span></div><div class='xr-var-dims'>(j, i)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-8.074 -8.107 ... -28.56 -28.59</div><input id='attrs-b43d4e98-f2ed-4cf0-b6f5-db48bbe69579' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b43d4e98-f2ed-4cf0-b6f5-db48bbe69579' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4a56f5c8-7522-4824-a706-e17f7d6a6f64' class='xr-var-data-in' type='checkbox'><label for='data-4a56f5c8-7522-4824-a706-e17f7d6a6f64' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>puv__uom :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P06/current/DEGN/</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>long_name :</span></dt><dd>Latitude</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>coordinate_type :</span></dt><dd>latitude</dd><dt><span>projection :</span></dt><dd>geographic</dd></dl></div><div class='xr-var-data'><pre>array([[ -8.0741344,  -8.1069128,  -8.1390488, ...,         nan,
                    nan,         nan],
           [ -8.063217 ,  -8.0957244,  -8.1278305, ...,         nan,
                    nan,         nan],
           [ -8.0526946,  -8.0849348,  -8.1169279, ...,         nan,
                    nan,         nan],
           ...,
           [ -7.0133871,  -7.0358495,  -7.0584407, ..., -28.5233981,
            -28.5594013, -28.5953144],
           [ -7.0127399,  -7.0348327,  -7.0571806, ..., -28.5227067,
            -28.5586112, -28.5943624],
           [ -7.0119082,  -7.0335482,  -7.0556973, ..., -28.5221398,
            -28.5579669, -28.5935179]], shape=(180, 600))</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>longitude</span></div><div class='xr-var-dims'>(j, i)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>142.2 142.2 142.2 ... 156.9 156.9</div><input id='attrs-fc897444-7abb-4599-9a27-3879a09bf52e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-fc897444-7abb-4599-9a27-3879a09bf52e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8a437921-42e5-4921-b588-f25ca665c33a' class='xr-var-data-in' type='checkbox'><label for='data-8a437921-42e5-4921-b588-f25ca665c33a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>puv__uom :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P06/current/DEGE/</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>long_name :</span></dt><dd>Longitude</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>coordinate_type :</span></dt><dd>longitude</dd><dt><span>projection :</span></dt><dd>geographic</dd></dl></div><div class='xr-var-data'><pre>array([[142.168788 , 142.1804468, 142.19211  , ...,         nan,
                    nan,         nan],
           [142.2013204, 142.2123752, 142.2236158, ...,         nan,
                    nan,         nan],
           [142.2333969, 142.2441535, 142.25509  , ...,         nan,
                    nan,         nan],
           ...,
           [147.8135068, 147.8142988, 147.8153794, ..., 156.8042355,
            156.8051407, 156.8061819],
           [147.8353694, 147.8363158, 147.8375886, ..., 156.84433  ,
            156.8451114, 156.8460513],
           [147.8566896, 147.8580363, 147.8596273, ..., 156.8843511,
            156.8849406, 156.8856378]], shape=(180, 600))</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>time</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2022-10-15T14:00:00</div><input id='attrs-fe09a229-43d6-499e-9dce-5b0c5d078ff1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-fe09a229-43d6-499e-9dce-5b0c5d078ff1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c5fd95c9-1b34-4016-8fd7-af5ad412f862' class='xr-var-data-in' type='checkbox'><label for='data-c5fd95c9-1b34-4016-8fd7-af5ad412f862' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Time</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>coordinate_type :</span></dt><dd>time</dd><dt><span>puv__uom :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P06/current/UTAA/</dd><dt><span>_ChunkSizes :</span></dt><dd>512</dd></dl></div><div class='xr-var-data'><pre>array(&#x27;2022-10-15T14:00:00.000000000&#x27;, dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>zc</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>1.5</div><input id='attrs-64111995-5693-469d-83ce-5ad9db2dd22e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-64111995-5693-469d-83ce-5ad9db2dd22e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-439e1071-9ffb-4bfd-9946-296bfccc6983' class='xr-var-data-in' type='checkbox'><label for='data-439e1071-9ffb-4bfd-9946-296bfccc6983' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>puv__uom :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P06/current/ULAA/</dd><dt><span>units :</span></dt><dd>m</dd><dt><span>positive :</span></dt><dd>up</dd><dt><span>long_name :</span></dt><dd>Z coordinate</dd><dt><span>axis :</span></dt><dd>Z</dd><dt><span>coordinate_type :</span></dt><dd>Z</dd></dl></div><div class='xr-var-data'><pre>array(1.5)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-6cac9e59-e959-4ba2-a89a-c9a1eeb8ea61' class='xr-section-summary-in' type='checkbox' checked /><label for='section-6cac9e59-e959-4ba2-a89a-c9a1eeb8ea61' class='xr-section-summary' title='Expand/collapse section'>Data variables: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>temp</span></div><div class='xr-var-dims'>(j, i)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan ... 20.92 20.93 20.93</div><input id='attrs-938f7305-9fef-4b74-aa1e-f2d497ffea21' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-938f7305-9fef-4b74-aa1e-f2d497ffea21' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-aebb115d-aedd-49c3-99f1-dc46d447ff72' class='xr-var-data-in' type='checkbox'><label for='data-aebb115d-aedd-49c3-99f1-dc46d447ff72' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>_ChunkSizes :</span></dt><dd>[  1  24  90 300]</dd><dt><span>long_name :</span></dt><dd>Temperature</dd><dt><span>puv__parameter :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P01/current/TEMPMP01/</dd><dt><span>units :</span></dt><dd>degrees C</dd><dt><span>valid_range :</span></dt><dd>[ 0. 40.]</dd></dl></div><div class='xr-var-data'><pre>array([[        nan,         nan,         nan, ...,         nan,
                    nan,         nan],
           [        nan,         nan,         nan, ...,         nan,
                    nan,         nan],
           [        nan,         nan,         nan, ...,         nan,
                    nan,         nan],
           ...,
           [        nan,         nan,         nan, ..., 20.92445135,
            20.93568182, 20.93665838],
           [        nan,         nan,         nan, ..., 20.92445135,
            20.93421698, 20.93714666],
           [        nan,         nan,         nan, ..., 20.91517401,
            20.93177557, 20.93324041]], shape=(180, 600))</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>u</span></div><div class='xr-var-dims'>(j, i)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan ... 0.03509 0.05466</div><input id='attrs-463092f5-0433-4cfc-bf2a-4581f0fdaa91' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-463092f5-0433-4cfc-bf2a-4581f0fdaa91' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-22462fd1-7065-481c-9b28-d956097ca3ed' class='xr-var-data-in' type='checkbox'><label for='data-22462fd1-7065-481c-9b28-d956097ca3ed' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>_ChunkSizes :</span></dt><dd>[  1  24  90 300]</dd><dt><span>long_name :</span></dt><dd>Eastward current</dd><dt><span>standard_name :</span></dt><dd>eastward_sea_water_velocity</dd><dt><span>vector_name :</span></dt><dd>Currents</dd><dt><span>puv__parameter :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P01/current/LCEWMP01/</dd><dt><span>units :</span></dt><dd>ms-1</dd><dt><span>vector_components :</span></dt><dd>u v</dd><dt><span>valid_range :</span></dt><dd>[-100.  100.]</dd></dl></div><div class='xr-var-data'><pre>array([[        nan,         nan,         nan, ...,         nan,
                    nan,         nan],
           [        nan,         nan,         nan, ...,         nan,
                    nan,         nan],
           [        nan,         nan,         nan, ...,         nan,
                    nan,         nan],
           ...,
           [        nan,         nan,         nan, ..., -0.00702071,
             0.06094193,  0.10937333],
           [        nan,         nan,         nan, ..., -0.00833297,
             0.06732011,  0.1100142 ],
           [        nan,         nan,         nan, ..., -0.00515914,
             0.03509355,  0.05465531]], shape=(180, 600))</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>v</span></div><div class='xr-var-dims'>(j, i)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan ... 0.08797 0.04464</div><input id='attrs-79e5c917-7204-433c-accb-c51c3b20c8ca' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-79e5c917-7204-433c-accb-c51c3b20c8ca' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a516fec2-5aed-4ca7-8a6f-74352346c0a8' class='xr-var-data-in' type='checkbox'><label for='data-a516fec2-5aed-4ca7-8a6f-74352346c0a8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>_ChunkSizes :</span></dt><dd>[  1  24  90 300]</dd><dt><span>long_name :</span></dt><dd>Northward current</dd><dt><span>standard_name :</span></dt><dd>northward_sea_water_velocity</dd><dt><span>vector_name :</span></dt><dd>Currents</dd><dt><span>puv__parameter :</span></dt><dd>http://vocab.nerc.ac.uk/collection/P01/current/LCNSMP01/</dd><dt><span>units :</span></dt><dd>ms-1</dd><dt><span>vector_components :</span></dt><dd>u v</dd><dt><span>valid_range :</span></dt><dd>[-100.  100.]</dd></dl></div><div class='xr-var-data'><pre>array([[       nan,        nan,        nan, ...,        nan,        nan,
                   nan],
           [       nan,        nan,        nan, ...,        nan,        nan,
                   nan],
           [       nan,        nan,        nan, ...,        nan,        nan,
                   nan],
           ...,
           [       nan,        nan,        nan, ..., 0.03984872, 0.04570809,
            0.0269703 ],
           [       nan,        nan,        nan, ..., 0.04747811, 0.0544056 ,
            0.03197518],
           [       nan,        nan,        nan, ..., 0.08803597, 0.08797494,
            0.04463997]], shape=(180, 600))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ae22f383-9bbd-4094-9fb3-c7d6d762cad6' class='xr-section-summary-in' type='checkbox' /><label for='section-ae22f383-9bbd-4094-9fb3-c7d6d762cad6' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(16)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>title :</span></dt><dd>gbr4_H4p0_ABARRAr2_OBRAN2020_FG2Gv3_Dhnd</dd><dt><span>description :</span></dt><dd>eReefs GBR 4k grid with 64 active river flows. Hydro 4.0.</dd><dt><span>paramhead :</span></dt><dd>eReefs GBR 4k grid, with Atmospheric forcing using BARRAr2, open Ocean forcing using BRAN2020, river Flows forcing using G2G and QDES SOURCE; Deployed as a hindcast. Hydro GBR4 parameter file 4.0.</dd><dt><span>paramfile :</span></dt><dd>/g/data/et4/projects/eReefs/gbr4_H4p0_ABARRAr2_OBRAN2020_FG2Gv3_Dhnd/tran/gbr4_H4p0_ABARRAr2_OBRAN2020_FG2Gv3.tran</dd><dt><span>ems_version :</span></dt><dd>v1.4.0 rev(7365)</dd><dt><span>date_created :</span></dt><dd>Mon Oct 21 15:47:23 2024</dd><dt><span>Conventions :</span></dt><dd>CF-1.0</dd><dt><span>Run_ID :</span></dt><dd>4.0</dd><dt><span>Run_code :</span></dt><dd>SHOC grid|G3.00|H4.0|S-3.00|B0.00</dd><dt><span>Parameter_File_Revision :</span></dt><dd>$Revision$</dd><dt><span>bald__isPrefixedBy :</span></dt><dd>prefix_list</dd><dt><span>metadata_link :</span></dt><dd>https://marlin.csiro.au/geonetwork/srv/eng/catalog.search#/metadata/dcc8462c-8dc5-4d78-b9d8-6f1c31ae0001</dd><dt><span>prefix_list_puv__ :</span></dt><dd>https://w3id.org/env/puv#</dd><dt><span>DODS_EXTRA.Unlimited_Dimension :</span></dt><dd>time</dd><dt><span>history :</span></dt><dd>Wed Jan 14 14:15:20 2026: ncks -d time,0,0 https://thredds.nci.org.au/thredds/dodsC/fx3/gbr4_H4p0_ABARRAr2_OBRAN2020_FG2Gv3_Dhnd/gbr4_simple_2022-10-16.nc gbr4.temp.nc</dd><dt><span>NCO :</span></dt><dd>netCDF Operators version 5.3.6 (Homepage = http://nco.sf.net, Code = http://github.com/nco/nco, Citation = 10.1016/j.envsoft.2008.03.004)</dd></dl></div></li></ul></div></div>
    </div>
    <br />
    <br />

.. GENERATED FROM PYTHON SOURCE LINES 28-29

Plotting every cell is straight forward for small areas:

.. GENERATED FROM PYTHON SOURCE LINES 30-52

.. code-block:: Python


    figure = plt.figure(figsize=(7, 8), layout="constrained")
    axes = figure.add_subplot(projection=dataset.ems.data_crs)
    figure.suptitle("Surface water temperature and currents near the Whitsundays")

    temp = surface_currents["temp"]
    temp_artist = dataset.ems.make_artist(
        axes, temp,
        cmap="coolwarm", clim=(24, 27))

    current_artist = dataset.ems.make_artist(
        axes, (surface_currents["u"], surface_currents["v"]),
        scale=20, scale_units="width")

    plot.add_coast(axes)
    plot.add_gridlines(axes)

    # Just show a small area over the Whitsundays
    view_box = box(148.7, -20.4, 149.6, -19.8)
    axes.set_aspect("equal", adjustable="datalim")
    axes.set_extent(plot.bounds_to_extent(view_box.bounds))




.. image-sg:: /examples/images/sphx_glr_plot-vector-methods_001.png
   :alt: Surface water temperature and currents near the Whitsundays
   :srcset: /examples/images/sphx_glr_plot-vector-methods_001.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 53-54

Plotting the entire dataset this way leads to the current vectors becoming a confusing mess however:

.. GENERATED FROM PYTHON SOURCE LINES 55-74

.. code-block:: Python


    figure = plt.figure(figsize=(7, 10), layout="constrained")
    axes = figure.add_subplot(projection=dataset.ems.data_crs)
    figure.suptitle("A bad plot of surface water temperature and currents over the entire reef")

    temp = surface_currents["temp"]
    temp_artist = dataset.ems.make_artist(axes, temp, cmap="coolwarm")

    current_artist = dataset.ems.make_artist(
        axes, (surface_currents["u"], surface_currents["v"]),
        scale=20, scale_units="width")

    plot.add_coast(axes)
    plot.add_gridlines(axes)

    # Show the entire model domain
    axes.set_aspect("equal", adjustable="datalim")
    axes.autoscale()




.. image-sg:: /examples/images/sphx_glr_plot-vector-methods_002.png
   :alt: A bad plot of surface water temperature and currents over the entire reef
   :srcset: /examples/images/sphx_glr_plot-vector-methods_002.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 75-83

Sampling gridded datasets
=========================

For datasets on a two dimensional grid like this
we can sample the current data at regular intervals
to display only a subset of the vectors.
The sampled points will follow the geometry of the dataset.
For curvilinear datasets such as `GBR4` the vectors will follow the curves of the dataset shape:

.. GENERATED FROM PYTHON SOURCE LINES 84-117

.. code-block:: Python


    # Make an empty array of the same shape as the data, then select every 10th cell in there.
    face_grid = dataset.ems.get_grid(surface_currents["u"])
    samples = xarray.DataArray(numpy.full(face_grid.size, False))
    samples = face_grid.wind(samples)
    samples[::10, ::10] = True
    samples = dataset.ems.ravel(samples)

    # Select the (x, y) coordinates and the (u, v) components of the sampled cells
    x, y = face_grid.centroid_coordinates[samples].T
    u = dataset.ems.ravel(surface_currents["u"]).values[samples]
    v = dataset.ems.ravel(surface_currents["v"]).values[samples]

    # Plot the points
    figure = plt.figure(figsize=(7, 10), layout="constrained")
    axes = figure.add_subplot(projection=dataset.ems.data_crs)
    figure.suptitle("Surface water temperature and currents across the entire dataset domain")

    temp = surface_currents["temp"]
    temp_artist = dataset.ems.make_artist(axes, temp, cmap="coolwarm")

    quiver = plt.quiver(
        x, y, u, v,
        scale=40, scale_units="width")
    axes.add_collection(quiver)

    plot.add_coast(axes)
    plot.add_gridlines(axes)

    # Show the entire model domain
    axes.set_aspect("equal", adjustable="datalim")
    axes.autoscale()




.. image-sg:: /examples/images/sphx_glr_plot-vector-methods_003.png
   :alt: Surface water temperature and currents across the entire dataset domain
   :srcset: /examples/images/sphx_glr_plot-vector-methods_003.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 118-126

Sampling the dataset domain
===========================

Another approach is to plot vectors at regular points across the dataset domain
by sampling at regular intervals.
The vector locations are not tied to the grid geometry.
This approach will work with unstructured grids unlike the previous method.
:func:`.point_extraction.extract_dataframe` can be used for this:

.. GENERATED FROM PYTHON SOURCE LINES 127-160

.. code-block:: Python


    # Generate a mesh of points across the dataset domain
    domain = box(*dataset.ems.bounds)
    x = numpy.arange(domain.bounds[0], domain.bounds[2], 0.4)
    y = numpy.arange(domain.bounds[1], domain.bounds[3], 0.4)
    xx, yy = numpy.meshgrid(x, y)
    points = pandas.DataFrame({
        'x': xx.flatten(),
        'y': yy.flatten(),
    })

    # Extract the surface current components at these locations
    components = point_extraction.extract_dataframe(
        surface_currents, points, ('x', 'y'), missing_points='drop')

    # Plot the points
    figure = plt.figure(figsize=(7, 10), layout="constrained")
    axes = figure.add_subplot(projection=dataset.ems.data_crs)
    figure.suptitle("Surface water temperature and currents across the entire dataset domain")

    temp = surface_currents["temp"]
    temp_artist = dataset.ems.make_artist(axes, temp, cmap="coolwarm")

    quiver = plt.quiver(
        components['x'], components['y'], components['u'], components['v'],
        scale=30, scale_units="width")
    axes.add_collection(quiver)

    plot.add_coast(axes)
    plot.add_gridlines(axes)

    axes.set_aspect("equal", adjustable="datalim")
    axes.autoscale()



.. image-sg:: /examples/images/sphx_glr_plot-vector-methods_004.png
   :alt: Surface water temperature and currents across the entire dataset domain
   :srcset: /examples/images/sphx_glr_plot-vector-methods_004.png
   :class: sphx-glr-single-img






.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 14.574 seconds)


.. _sphx_glr_download_examples_plot-vector-methods.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot-vector-methods.ipynb <plot-vector-methods.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot-vector-methods.py <plot-vector-methods.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot-vector-methods.zip <plot-vector-methods.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
