
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "tutorial/01_basic/a_lesson_basic.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

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

        :ref:`Go to the end <sphx_glr_download_tutorial_01_basic_a_lesson_basic.py>`
        to download the full example code or to run this example in your browser via Binder.

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

.. _sphx_glr_tutorial_01_basic_a_lesson_basic.py:


.. _basic_lesson:

Basic Usage Lesson
==================

This section demonstrates how to use PyVista to read and plot 3D data
using the `pyvista.examples.downloads
<https://docs.pyvista.org/api/examples/_autosummary/pyvista.examples.downloads.html>`_
module and external files.

.. GENERATED FROM PYTHON SOURCE LINES 12-20

.. code-block:: Python


    import pyvista as pv
    from pyvista import examples

    # Set the default plot theme to the "document" theme.
    # pv.set_plot_theme('document')









.. GENERATED FROM PYTHON SOURCE LINES 21-27

Using Existing Data
~~~~~~~~~~~~~~~~~~~
There are two main ways of getting data into PyVista: creating it yourself from
scratch or loading the dataset from any one of the `compatible file formats
<https://docs.pyvista.org/api/readers/index.html>`_. Since we're just starting
out, let's load a file.

.. GENERATED FROM PYTHON SOURCE LINES 27-38

.. code-block:: Python


    # If you have a dataset handy, like a surface model, point cloud, or VTK file,
    # you can use that. If you don't have something immediately available, PyVista
    # has a variety of files you can download in its `pyvista.examples.downloads
    # <https://docs.pyvista.org/api/examples/_autosummary/pyvista.examples.downloads.html>`_
    #


    dataset = examples.download_saddle_surface()
    dataset






.. raw:: html

    <div class="output_subarea output_html rendered_html output_result">
    <div><style>/* PyVista HTML repr stylesheet.
     * Uses pv- prefix to avoid conflicts with other libraries.
     */

    :root {
      --pv-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));
      --pv-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.6));
      --pv-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.55));
      --pv-border-color: var(--jp-border-color2, #e0e0e0);
      --pv-disabled-color: var(--jp-layout-color3, #bdbdbd);
      --pv-background-color: var(--jp-layout-color0, #ffffff);
      --pv-background-color-row-even: var(--jp-layout-color1, #f5f5f5);
      --pv-background-color-row-odd: var(--jp-layout-color2, #eeeeee);
      --pv-badge-active: #1b5e20;
      --pv-badge-normals: #0d47a1;
      --pv-badge-vectors: #00695c;
      --pv-badge-tcoords: #4527a0;
    }

    body[data-jp-theme-light="false"] {
      --pv-font-color0: var(--jp-content-font-color0, rgba(255, 255, 255, 1));
      --pv-font-color2: var(--jp-content-font-color2, rgba(255, 255, 255, 0.6));
      --pv-font-color3: var(--jp-content-font-color3, rgba(255, 255, 255, 0.55));
      --pv-border-color: var(--jp-border-color2, #424242);
      --pv-disabled-color: var(--jp-layout-color3, #616161);
      --pv-background-color: var(--jp-layout-color0, #1a1a1a);
      --pv-background-color-row-even: var(--jp-layout-color1, #1f1f1f);
      --pv-background-color-row-odd: var(--jp-layout-color2, #2a2a2a);
      --pv-badge-active: #66bb6a;
      --pv-badge-normals: #64b5f6;
      --pv-badge-vectors: #4db6ac;
      --pv-badge-tcoords: #b39ddb;
    }

    /* Values here are deliberately hardcoded rather than written as
     * var(--jp-*, fallback), because a var() fallback only applies when the variable
     * is *undefined*, not when it is defined with a value belonging to the other
     * theme. Custom properties inherit, so a host that defines the --jp-* variables
     * light-only on :root would have those light values resolve here, and the dark
     * fallback would never be reached. Do not "simplify" these into var() chains.
     */
    html[theme="dark"],
    html[data-theme="dark"],
    body[data-theme="dark"],
    body.vscode-dark {
      --pv-font-color0: rgba(255, 255, 255, 1);
      --pv-font-color2: rgba(255, 255, 255, 0.6);
      --pv-font-color3: rgba(255, 255, 255, 0.55);
      --pv-border-color: #424242;
      --pv-disabled-color: #616161;
      --pv-background-color: #1a1a1a;
      --pv-background-color-row-even: #1f1f1f;
      --pv-background-color-row-odd: #2a2a2a;
      --pv-badge-active: #66bb6a;
      --pv-badge-normals: #64b5f6;
      --pv-badge-vectors: #4db6ac;
      --pv-badge-tcoords: #b39ddb;
    }

    /* OS-level dark mode fallback: applies when no explicit data-theme is set.
     * Keep these values identical to the explicit dark block above, and hardcoded
     * for the same reason.
     */
    @media (prefers-color-scheme: dark) {
      html:not([data-theme="light"]) {
        --pv-font-color0: rgba(255, 255, 255, 1);
        --pv-font-color2: rgba(255, 255, 255, 0.6);
        --pv-font-color3: rgba(255, 255, 255, 0.55);
        --pv-border-color: #424242;
        --pv-disabled-color: #616161;
        --pv-background-color: #1a1a1a;
        --pv-background-color-row-even: #1f1f1f;
        --pv-background-color-row-odd: #2a2a2a;
        --pv-badge-active: #66bb6a;
        --pv-badge-normals: #64b5f6;
        --pv-badge-vectors: #4db6ac;
        --pv-badge-tcoords: #b39ddb;
      }
    }

    /* The background is set explicitly so that it is always resolved from the same
     * theme block as the text color. Without it the repr inherits the host's
     * background, which can disagree with our text color and render the repr
     * unreadable -- e.g. on docs.pyvista.org, where pydata-sphinx-theme gives HTML
     * cell outputs a light background in dark mode.
     *
     * A host can opt out and let the repr blend into its own surface by overriding
     * --pv-background-color, or by neutralising whatever backdrop it applies. The
     * PyVista docs do the latter in doc/source/_static/jupyter_sphinx_theme.css.
     */
    .pv-wrap {
      display: block !important;
      min-width: 300px;
      max-width: 700px;
      line-height: 1.6;
      padding: 6px 8px 8px 8px;
      box-sizing: border-box;
      border-radius: 3px;
      font-family: var(--jp-ui-font-family, sans-serif);
      font-size: var(--jp-ui-font-size1, 13px);
      color: var(--pv-font-color0);
      background-color: var(--pv-background-color);
    }

    .pv-text-repr-fallback {
      display: none;
    }

    /* Header */
    .pv-header {
      display: flex;
      align-items: center;
      gap: 8px;
      padding-top: 6px;
      padding-bottom: 6px;
      border-bottom: solid 1px var(--pv-border-color);
      margin-bottom: 4px;
    }

    .pv-header-text {
      display: flex;
      flex-direction: column;
      gap: 1px;
      min-width: 0;
      flex: 1;
    }

    .pv-obj-type {
      font-weight: 600;
      color: var(--pv-font-color0);
    }

    .pv-header-badge {
      display: inline-block;
      font-size: 0.75em;
      font-weight: 600;
      padding: 2px 7px;
      border-radius: 3px;
      color: var(--pv-font-color2);
      border: 1px solid var(--pv-border-color);
      white-space: nowrap;
    }

    /* Metadata (always-visible key-value rows) */
    .pv-metadata {
      margin: 4px 0 6px 0;
      font-size: 0.92em;
      line-height: 1.5;
    }

    .pv-meta-row {
      display: flex;
      flex-wrap: wrap;
      gap: 1px 14px;
      padding: 1px 0;
    }

    .pv-meta-row-label {
      color: var(--pv-font-color2);
      font-weight: 500;
      white-space: nowrap;
      min-width: 60px;
    }

    .pv-meta-entry {
      white-space: nowrap;
    }

    /* Copy-to-clipboard button */
    /* opacity compounds with the alpha of --pv-font-color3, so keep it high enough
     * that this control still clears the 3:1 non-text contrast minimum.
     */
    .pv-copy-btn {
      display: inline-block;
      cursor: pointer;
      opacity: 0.75;
      font-size: 0.85em;
      padding: 0 3px;
      vertical-align: middle;
      transition: opacity 0.15s;
      user-select: none;
      border: none;
      background: none;
      color: var(--pv-font-color3);
    }

    .pv-copy-btn:hover {
      opacity: 1;
      color: var(--pv-font-color0);
    }

    .pv-meta-label {
      color: var(--pv-font-color3);
      font-weight: 400;
      padding-right: 2px;
    }

    /* Sections grid */
    .pv-sections {
      padding-left: 0 !important;
      display: grid;
      grid-template-columns: 150px auto auto auto 1fr 20px 20px;
      margin-block-start: 0;
      margin-block-end: 0;
      list-style: none;
    }

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

    /* Hidden checkbox for expand/collapse */
    .pv-section-item > input {
      display: block;
      opacity: 0;
      height: 0;
      margin: 0;
    }

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

    .pv-section-item > input:enabled + label {
      cursor: pointer;
      color: var(--pv-font-color2);
    }

    .pv-section-item > input:enabled + label:hover {
      color: var(--pv-font-color0);
    }

    /* Section summary (left column label) */
    .pv-section-summary {
      grid-column: 1;
      color: var(--pv-font-color2);
      font-weight: 500;
      white-space: nowrap;
    }

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

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

    /* Expand/collapse arrows */
    .pv-section-summary-in + label:before {
      display: inline-block;
      content: "\25b6";
      font-size: 11px;
      width: 15px;
      text-align: center;
    }

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

    .pv-section-summary-in:checked + label:before {
      content: "\25bc";
    }

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

    .pv-section-summary,
    .pv-section-inline-details {
      padding-top: 4px;
    }

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

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

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

    .pv-section-summary-in:checked ~ .pv-section-inline-details {
      display: none;
    }

    .pv-section-summary-in:checked ~ .pv-section-details {
      display: block;
    }

    .pv-section-summary-in:checked ~ .pv-section-details:has(.pv-var-list) {
      display: contents;
    }

    /* Variable (array) list */
    .pv-var-list,
    .pv-var-item {
      display: contents;
    }

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

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

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

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

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

    .pv-var-range {
      grid-column: 4;
      color: var(--pv-font-color3);
      font-size: 0.92em;
    }

    .pv-var-badges {
      grid-column: 5;
      padding-left: 8px;
    }

    .pv-var-name,
    .pv-var-dims,
    .pv-var-dtype,
    .pv-var-range {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      padding-right: 10px;
    }

    .pv-var-name:hover,
    .pv-var-dims:hover,
    .pv-var-dtype:hover,
    .pv-var-range:hover {
      overflow: visible;
      width: auto;
      z-index: 1;
    }

    .pv-var-name span {
      padding-left: 25px !important;
    }

    .pv-var-name-active span {
      font-weight: 600;
    }

    /* Badges */
    .pv-badge {
      display: inline-block;
      font-size: 0.75em;
      font-weight: 600;
      padding: 1px 5px;
      border-radius: 3px;
      vertical-align: middle;
      line-height: 1.4;
    }

    .pv-badge-active {
      color: var(--pv-badge-active);
      border: 1px solid var(--pv-badge-active);
    }

    .pv-badge-normals {
      color: var(--pv-badge-normals);
      border: 1px solid var(--pv-badge-normals);
    }

    .pv-badge-vectors {
      color: var(--pv-badge-vectors);
      border: 1px solid var(--pv-badge-vectors);
    }

    .pv-badge-tcoords {
      color: var(--pv-badge-tcoords);
      border: 1px solid var(--pv-badge-tcoords);
    }

    /* Logo and Icons */
    .pv-logo {
      display: flex;
      align-items: center;
      flex-shrink: 0;
    }

    .pv-logo svg {
      width: 28px;
      height: 28px;
    }

    .pv-brand-logo {
      display: flex;
      align-items: center;
      flex-shrink: 0;
    }

    .pv-brand-logo svg {
      height: 20px;
      width: auto;
    }

    /* Children list (MultiBlock / PartitionedDataSet) */
    .pv-children-list {
      padding-left: 25px !important;
      list-style: none;
    }

    .pv-children-list li {
      padding: 1px 0;
    }

    .pv-child-name {
      font-weight: 500;
    }

    .pv-child-type {
      color: var(--pv-font-color2);
      font-style: italic;
    }

    .pv-child-type:before {
      content: "\00b7";
      padding: 0 6px;
      font-style: normal;
    }

    .pv-child-detail {
      color: var(--pv-font-color3);
      font-size: 0.9em;
    }

    .pv-child-detail:not(:empty):before {
      content: "\00b7";
      padding: 0 6px;
    }
    </style><pre class='pv-text-repr-fallback'>PolyData (0x7f1fb75a1d80)
      N Cells:    5131
      N Points:   2669
      N Strips:   0
      X Bounds:   -2.001e+01, 2.000e+01
      Y Bounds:   -6.480e-01, 4.024e+01
      Z Bounds:   -6.093e-01, 1.513e+01
      N Arrays:   0</pre><div class='pv-wrap' style='display:none'><div class='pv-header'><span class='pv-logo'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
      <defs>
        <linearGradient id="pv-pd-g1" x1="0" y1="0" x2="1" y2="1">
          <stop offset="0%" stop-color="#ffd040"/>
          <stop offset="100%" stop-color="#376fa0"/>
        </linearGradient>
      </defs>
      <polygon points="6,6 22,4 14,16" fill="#376fa0" opacity="0.9"/>
      <polygon points="22,4 28,16 14,16" fill="url(#pv-pd-g1)" opacity="0.85"/>
      <polygon points="6,6 14,16 4,26" fill="#1a4a70" opacity="0.85"/>
      <polygon points="14,16 28,16 20,28" fill="#376fa0" opacity="0.8"/>
      <polygon points="4,26 14,16 20,28" fill="#ffd040" opacity="0.8"/>
      <g stroke="rgba(255,255,255,0.65)" stroke-width="0.6" fill="none">
        <line x1="6" y1="6" x2="22" y2="4"/>
        <line x1="22" y1="4" x2="28" y2="16"/>
        <line x1="28" y1="16" x2="20" y2="28"/>
        <line x1="20" y1="28" x2="4" y2="26"/>
        <line x1="4" y1="26" x2="6" y2="6"/>
        <line x1="6" y1="6" x2="14" y2="16"/>
        <line x1="22" y1="4" x2="14" y2="16"/>
        <line x1="28" y1="16" x2="14" y2="16"/>
        <line x1="14" y1="16" x2="4" y2="26"/>
        <line x1="14" y1="16" x2="20" y2="28"/>
      </g>
      <g fill="rgba(255,255,255,0.85)">
        <circle cx="6" cy="6" r="1.3"/>
        <circle cx="22" cy="4" r="1.3"/>
        <circle cx="28" cy="16" r="1.3"/>
        <circle cx="14" cy="16" r="1.3"/>
        <circle cx="20" cy="28" r="1.3"/>
        <circle cx="4" cy="26" r="1.3"/>
      </g>
    </svg>
    </span><div class='pv-header-text'><div class='pv-obj-type'>PolyData <span class='pv-header-badge'>2,669 points</span> <span class='pv-header-badge'>5,131 cells</span> <span class='pv-header-badge'>94 KiB</span></div></div><span class='pv-brand-logo'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90 24">
      <text x="0" y="18" font-family="system-ui,-apple-system,sans-serif" font-size="18" font-weight="700" font-style="italic" letter-spacing="-0.5">
        <tspan fill="#3776AB" opacity="0.7">P</tspan><tspan fill="#FFD43B" opacity="0.7">y</tspan><tspan fill="#008c9e">Vista</tspan>
      </text>
    </svg>
    </span></div><div class='pv-metadata'><div class='pv-meta-row pv-copyable'><span class='pv-meta-row-label'>Bounds</span><button class='pv-copy-btn' title='Copy to clipboard' data-copy='(-20.012727737426758, 20.0, -0.647991418838501, 40.23965072631836, -0.6093360781669617, 15.127287864685059)' onclick="navigator.clipboard.writeText(this.dataset.copy)">⧉</button><span class='pv-meta-entry'><span class='pv-meta-label'>X</span> [-2.001e+01, 2.000e+01]</span><span class='pv-meta-entry'><span class='pv-meta-label'>Y</span> [-6.480e-01, 4.024e+01]</span><span class='pv-meta-entry'><span class='pv-meta-label'>Z</span> [-6.093e-01, 1.513e+01]</span></div><div class='pv-meta-row pv-copyable'><span class='pv-meta-row-label'>Cells</span><span class='pv-meta-entry'><span class='pv-meta-label'>faces</span> 5,131</span></div></div><ul class='pv-sections'></ul></div></div>
    </div>
    <br />
    <br />

.. GENERATED FROM PYTHON SOURCE LINES 39-41

Note how this is a :class:`pyvista.PolyData`, which is effectively a surface
dataset containing points, lines, and/or faces. We can immediately plot this with:

.. GENERATED FROM PYTHON SOURCE LINES 41-44

.. code-block:: Python


    dataset.plot()








.. tab-set::



   .. tab-item:: Static Scene



            
     .. image-sg:: /tutorial/01_basic/images/sphx_glr_a_lesson_basic_001.png
        :alt: a lesson basic
        :srcset: /tutorial/01_basic/images/sphx_glr_a_lesson_basic_001.png
        :class: sphx-glr-single-img
     


   .. tab-item:: Interactive Scene



       .. offlineviewer:: /home/runner/work/pyvista-tutorial/pyvista-tutorial/doc/source/tutorial/01_basic/images/sphx_glr_a_lesson_basic_001.vtksz






.. GENERATED FROM PYTHON SOURCE LINES 45-50

This is a fairly basic plot. You can change how its plotted by adding
parameters as ``show_edges=True`` or changing the color by setting ``color`` to
a different value. All of this is described in PyVista's API documentation in
:func:`pyvista.plot`, but for now let's take a look at another dataset. This
one is a volumetric dataset.

.. GENERATED FROM PYTHON SOURCE LINES 50-54

.. code-block:: Python


    dataset = examples.download_frog()
    dataset






.. raw:: html

    <div class="output_subarea output_html rendered_html output_result">
    <div><style>/* PyVista HTML repr stylesheet.
     * Uses pv- prefix to avoid conflicts with other libraries.
     */

    :root {
      --pv-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));
      --pv-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.6));
      --pv-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.55));
      --pv-border-color: var(--jp-border-color2, #e0e0e0);
      --pv-disabled-color: var(--jp-layout-color3, #bdbdbd);
      --pv-background-color: var(--jp-layout-color0, #ffffff);
      --pv-background-color-row-even: var(--jp-layout-color1, #f5f5f5);
      --pv-background-color-row-odd: var(--jp-layout-color2, #eeeeee);
      --pv-badge-active: #1b5e20;
      --pv-badge-normals: #0d47a1;
      --pv-badge-vectors: #00695c;
      --pv-badge-tcoords: #4527a0;
    }

    body[data-jp-theme-light="false"] {
      --pv-font-color0: var(--jp-content-font-color0, rgba(255, 255, 255, 1));
      --pv-font-color2: var(--jp-content-font-color2, rgba(255, 255, 255, 0.6));
      --pv-font-color3: var(--jp-content-font-color3, rgba(255, 255, 255, 0.55));
      --pv-border-color: var(--jp-border-color2, #424242);
      --pv-disabled-color: var(--jp-layout-color3, #616161);
      --pv-background-color: var(--jp-layout-color0, #1a1a1a);
      --pv-background-color-row-even: var(--jp-layout-color1, #1f1f1f);
      --pv-background-color-row-odd: var(--jp-layout-color2, #2a2a2a);
      --pv-badge-active: #66bb6a;
      --pv-badge-normals: #64b5f6;
      --pv-badge-vectors: #4db6ac;
      --pv-badge-tcoords: #b39ddb;
    }

    /* Values here are deliberately hardcoded rather than written as
     * var(--jp-*, fallback), because a var() fallback only applies when the variable
     * is *undefined*, not when it is defined with a value belonging to the other
     * theme. Custom properties inherit, so a host that defines the --jp-* variables
     * light-only on :root would have those light values resolve here, and the dark
     * fallback would never be reached. Do not "simplify" these into var() chains.
     */
    html[theme="dark"],
    html[data-theme="dark"],
    body[data-theme="dark"],
    body.vscode-dark {
      --pv-font-color0: rgba(255, 255, 255, 1);
      --pv-font-color2: rgba(255, 255, 255, 0.6);
      --pv-font-color3: rgba(255, 255, 255, 0.55);
      --pv-border-color: #424242;
      --pv-disabled-color: #616161;
      --pv-background-color: #1a1a1a;
      --pv-background-color-row-even: #1f1f1f;
      --pv-background-color-row-odd: #2a2a2a;
      --pv-badge-active: #66bb6a;
      --pv-badge-normals: #64b5f6;
      --pv-badge-vectors: #4db6ac;
      --pv-badge-tcoords: #b39ddb;
    }

    /* OS-level dark mode fallback: applies when no explicit data-theme is set.
     * Keep these values identical to the explicit dark block above, and hardcoded
     * for the same reason.
     */
    @media (prefers-color-scheme: dark) {
      html:not([data-theme="light"]) {
        --pv-font-color0: rgba(255, 255, 255, 1);
        --pv-font-color2: rgba(255, 255, 255, 0.6);
        --pv-font-color3: rgba(255, 255, 255, 0.55);
        --pv-border-color: #424242;
        --pv-disabled-color: #616161;
        --pv-background-color: #1a1a1a;
        --pv-background-color-row-even: #1f1f1f;
        --pv-background-color-row-odd: #2a2a2a;
        --pv-badge-active: #66bb6a;
        --pv-badge-normals: #64b5f6;
        --pv-badge-vectors: #4db6ac;
        --pv-badge-tcoords: #b39ddb;
      }
    }

    /* The background is set explicitly so that it is always resolved from the same
     * theme block as the text color. Without it the repr inherits the host's
     * background, which can disagree with our text color and render the repr
     * unreadable -- e.g. on docs.pyvista.org, where pydata-sphinx-theme gives HTML
     * cell outputs a light background in dark mode.
     *
     * A host can opt out and let the repr blend into its own surface by overriding
     * --pv-background-color, or by neutralising whatever backdrop it applies. The
     * PyVista docs do the latter in doc/source/_static/jupyter_sphinx_theme.css.
     */
    .pv-wrap {
      display: block !important;
      min-width: 300px;
      max-width: 700px;
      line-height: 1.6;
      padding: 6px 8px 8px 8px;
      box-sizing: border-box;
      border-radius: 3px;
      font-family: var(--jp-ui-font-family, sans-serif);
      font-size: var(--jp-ui-font-size1, 13px);
      color: var(--pv-font-color0);
      background-color: var(--pv-background-color);
    }

    .pv-text-repr-fallback {
      display: none;
    }

    /* Header */
    .pv-header {
      display: flex;
      align-items: center;
      gap: 8px;
      padding-top: 6px;
      padding-bottom: 6px;
      border-bottom: solid 1px var(--pv-border-color);
      margin-bottom: 4px;
    }

    .pv-header-text {
      display: flex;
      flex-direction: column;
      gap: 1px;
      min-width: 0;
      flex: 1;
    }

    .pv-obj-type {
      font-weight: 600;
      color: var(--pv-font-color0);
    }

    .pv-header-badge {
      display: inline-block;
      font-size: 0.75em;
      font-weight: 600;
      padding: 2px 7px;
      border-radius: 3px;
      color: var(--pv-font-color2);
      border: 1px solid var(--pv-border-color);
      white-space: nowrap;
    }

    /* Metadata (always-visible key-value rows) */
    .pv-metadata {
      margin: 4px 0 6px 0;
      font-size: 0.92em;
      line-height: 1.5;
    }

    .pv-meta-row {
      display: flex;
      flex-wrap: wrap;
      gap: 1px 14px;
      padding: 1px 0;
    }

    .pv-meta-row-label {
      color: var(--pv-font-color2);
      font-weight: 500;
      white-space: nowrap;
      min-width: 60px;
    }

    .pv-meta-entry {
      white-space: nowrap;
    }

    /* Copy-to-clipboard button */
    /* opacity compounds with the alpha of --pv-font-color3, so keep it high enough
     * that this control still clears the 3:1 non-text contrast minimum.
     */
    .pv-copy-btn {
      display: inline-block;
      cursor: pointer;
      opacity: 0.75;
      font-size: 0.85em;
      padding: 0 3px;
      vertical-align: middle;
      transition: opacity 0.15s;
      user-select: none;
      border: none;
      background: none;
      color: var(--pv-font-color3);
    }

    .pv-copy-btn:hover {
      opacity: 1;
      color: var(--pv-font-color0);
    }

    .pv-meta-label {
      color: var(--pv-font-color3);
      font-weight: 400;
      padding-right: 2px;
    }

    /* Sections grid */
    .pv-sections {
      padding-left: 0 !important;
      display: grid;
      grid-template-columns: 150px auto auto auto 1fr 20px 20px;
      margin-block-start: 0;
      margin-block-end: 0;
      list-style: none;
    }

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

    /* Hidden checkbox for expand/collapse */
    .pv-section-item > input {
      display: block;
      opacity: 0;
      height: 0;
      margin: 0;
    }

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

    .pv-section-item > input:enabled + label {
      cursor: pointer;
      color: var(--pv-font-color2);
    }

    .pv-section-item > input:enabled + label:hover {
      color: var(--pv-font-color0);
    }

    /* Section summary (left column label) */
    .pv-section-summary {
      grid-column: 1;
      color: var(--pv-font-color2);
      font-weight: 500;
      white-space: nowrap;
    }

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

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

    /* Expand/collapse arrows */
    .pv-section-summary-in + label:before {
      display: inline-block;
      content: "\25b6";
      font-size: 11px;
      width: 15px;
      text-align: center;
    }

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

    .pv-section-summary-in:checked + label:before {
      content: "\25bc";
    }

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

    .pv-section-summary,
    .pv-section-inline-details {
      padding-top: 4px;
    }

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

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

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

    .pv-section-summary-in:checked ~ .pv-section-inline-details {
      display: none;
    }

    .pv-section-summary-in:checked ~ .pv-section-details {
      display: block;
    }

    .pv-section-summary-in:checked ~ .pv-section-details:has(.pv-var-list) {
      display: contents;
    }

    /* Variable (array) list */
    .pv-var-list,
    .pv-var-item {
      display: contents;
    }

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

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

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

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

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

    .pv-var-range {
      grid-column: 4;
      color: var(--pv-font-color3);
      font-size: 0.92em;
    }

    .pv-var-badges {
      grid-column: 5;
      padding-left: 8px;
    }

    .pv-var-name,
    .pv-var-dims,
    .pv-var-dtype,
    .pv-var-range {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      padding-right: 10px;
    }

    .pv-var-name:hover,
    .pv-var-dims:hover,
    .pv-var-dtype:hover,
    .pv-var-range:hover {
      overflow: visible;
      width: auto;
      z-index: 1;
    }

    .pv-var-name span {
      padding-left: 25px !important;
    }

    .pv-var-name-active span {
      font-weight: 600;
    }

    /* Badges */
    .pv-badge {
      display: inline-block;
      font-size: 0.75em;
      font-weight: 600;
      padding: 1px 5px;
      border-radius: 3px;
      vertical-align: middle;
      line-height: 1.4;
    }

    .pv-badge-active {
      color: var(--pv-badge-active);
      border: 1px solid var(--pv-badge-active);
    }

    .pv-badge-normals {
      color: var(--pv-badge-normals);
      border: 1px solid var(--pv-badge-normals);
    }

    .pv-badge-vectors {
      color: var(--pv-badge-vectors);
      border: 1px solid var(--pv-badge-vectors);
    }

    .pv-badge-tcoords {
      color: var(--pv-badge-tcoords);
      border: 1px solid var(--pv-badge-tcoords);
    }

    /* Logo and Icons */
    .pv-logo {
      display: flex;
      align-items: center;
      flex-shrink: 0;
    }

    .pv-logo svg {
      width: 28px;
      height: 28px;
    }

    .pv-brand-logo {
      display: flex;
      align-items: center;
      flex-shrink: 0;
    }

    .pv-brand-logo svg {
      height: 20px;
      width: auto;
    }

    /* Children list (MultiBlock / PartitionedDataSet) */
    .pv-children-list {
      padding-left: 25px !important;
      list-style: none;
    }

    .pv-children-list li {
      padding: 1px 0;
    }

    .pv-child-name {
      font-weight: 500;
    }

    .pv-child-type {
      color: var(--pv-font-color2);
      font-style: italic;
    }

    .pv-child-type:before {
      content: "\00b7";
      padding: 0 6px;
      font-style: normal;
    }

    .pv-child-detail {
      color: var(--pv-font-color3);
      font-size: 0.9em;
    }

    .pv-child-detail:not(:empty):before {
      content: "\00b7";
      padding: 0 6px;
    }
    </style><pre class='pv-text-repr-fallback'>ImageData (0x7f1fb75a2da0)
      N Cells:      31594185
      N Points:     31960000
      X Bounds:     0.000e+00, 4.990e+02
      Y Bounds:     0.000e+00, 4.690e+02
      Z Bounds:     0.000e+00, 2.025e+02
      Dimensions:   500, 470, 136
      Spacing:      1.000e+00, 1.000e+00, 1.500e+00
      N Arrays:     1</pre><div class='pv-wrap' style='display:none'><div class='pv-header'><span class='pv-logo'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
      <defs>
        <linearGradient id="pv-id-top" x1="0" y1="0" x2="1" y2="1">
          <stop offset="0%" stop-color="#ffd040"/>
          <stop offset="100%" stop-color="#376fa0"/>
        </linearGradient>
        <linearGradient id="pv-id-left" x1="0" y1="0" x2="0" y2="1">
          <stop offset="0%" stop-color="#376fa0"/>
          <stop offset="100%" stop-color="#1a4a70"/>
        </linearGradient>
        <linearGradient id="pv-id-right" x1="0" y1="0" x2="0" y2="1">
          <stop offset="0%" stop-color="#ffd040"/>
          <stop offset="100%" stop-color="#d4442a"/>
        </linearGradient>
      </defs>
      <polygon points="16,2 28,8 16,14 4,8" fill="url(#pv-id-top)"/>
      <polygon points="4,8 16,14 16,28 4,22" fill="url(#pv-id-left)"/>
      <polygon points="28,8 16,14 16,28 28,22" fill="url(#pv-id-right)"/>
      <g stroke="rgba(255,255,255,0.45)" stroke-width="0.4" fill="none">
        <polygon points="16,2 28,8 16,14 4,8"/>
        <line x1="16" y1="14" x2="16" y2="28"/>
        <line x1="4" y1="8" x2="4" y2="22"/>
        <line x1="28" y1="8" x2="28" y2="22"/>
        <line x1="4" y1="22" x2="16" y2="28"/>
        <line x1="28" y1="22" x2="16" y2="28"/>
        <line x1="12" y1="4" x2="24" y2="10"/>
        <line x1="8" y1="6" x2="20" y2="12"/>
        <line x1="20" y1="4" x2="8" y2="10"/>
        <line x1="24" y1="6" x2="12" y2="12"/>
        <line x1="4" y1="12.67" x2="16" y2="18.67"/>
        <line x1="4" y1="17.33" x2="16" y2="23.33"/>
        <line x1="8" y1="10" x2="8" y2="24"/>
        <line x1="12" y1="12" x2="12" y2="26"/>
        <line x1="28" y1="12.67" x2="16" y2="18.67"/>
        <line x1="28" y1="17.33" x2="16" y2="23.33"/>
        <line x1="24" y1="10" x2="24" y2="24"/>
        <line x1="20" y1="12" x2="20" y2="26"/>
      </g>
    </svg>
    </span><div class='pv-header-text'><div class='pv-obj-type'>ImageData <span class='pv-header-badge'>31,960,000 points</span> <span class='pv-header-badge'>31,594,185 cells</span> <span class='pv-header-badge'>30.5 MiB</span></div></div><span class='pv-brand-logo'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90 24">
      <text x="0" y="18" font-family="system-ui,-apple-system,sans-serif" font-size="18" font-weight="700" font-style="italic" letter-spacing="-0.5">
        <tspan fill="#3776AB" opacity="0.7">P</tspan><tspan fill="#FFD43B" opacity="0.7">y</tspan><tspan fill="#008c9e">Vista</tspan>
      </text>
    </svg>
    </span></div><div class='pv-metadata'><div class='pv-meta-row pv-copyable'><span class='pv-meta-row-label'>Bounds</span><button class='pv-copy-btn' title='Copy to clipboard' data-copy='(0.0, 499.0, 0.0, 469.0, 0.0, 202.5)' onclick="navigator.clipboard.writeText(this.dataset.copy)">⧉</button><span class='pv-meta-entry'><span class='pv-meta-label'>X</span> [0.000e+00, 4.990e+02]</span><span class='pv-meta-entry'><span class='pv-meta-label'>Y</span> [0.000e+00, 4.690e+02]</span><span class='pv-meta-entry'><span class='pv-meta-label'>Z</span> [0.000e+00, 2.025e+02]</span></div><div class='pv-meta-row pv-copyable'><span class='pv-meta-row-label'>Grid</span><span class='pv-meta-entry'><span class='pv-meta-label'>dims</span> 500 x 470 x 136</span><span class='pv-meta-entry'><span class='pv-meta-label'>spacing</span> (1.000e+00, 1.000e+00, 1.500e+00)</span></div></div><ul class='pv-sections'><li class='pv-section-item'><input id='section-b93dea05-bb8f-463b-8344-27d812f53b06' class='pv-section-summary-in' type='checkbox' checked /><label for='section-b93dea05-bb8f-463b-8344-27d812f53b06' class='pv-section-summary' title='Expand/collapse section'>Point Data: <span>(1)</span></label><div class='pv-section-inline-details'>MetaImage <span class='pv-badge pv-badge-active'>active</span></div><div class='pv-section-details'><ul class='pv-var-list'><li class='pv-var-item'><div class='pv-var-name pv-var-name-active'><span>MetaImage</span><button class='pv-copy-btn' title='Copy to clipboard' data-copy='MetaImage' onclick="navigator.clipboard.writeText(this.dataset.copy)">⧉</button></div><div class='pv-var-dims'>scalar</div><div class='pv-var-dtype'>uint8</div><div class='pv-var-range'>[0.000e+00, 2.540e+02]</div><div class='pv-var-badges'> <span class='pv-badge pv-badge-active'>active</span></div></li></ul></div></li></ul></div></div>
    </div>
    <br />
    <br />

.. GENERATED FROM PYTHON SOURCE LINES 55-59

This is a :class:`pyvista.ImageData`, which is a dataset containing a uniform
set of points with consistent spacing. When we plot this dataset, we have the
option of enabling volumetric plotting, which plots individual cells based on
the content of the data associated with those cells.

.. GENERATED FROM PYTHON SOURCE LINES 59-63

.. code-block:: Python


    dataset.plot(volume=True)









.. tab-set::



   .. tab-item:: Static Scene



            
     .. image-sg:: /tutorial/01_basic/images/sphx_glr_a_lesson_basic_002.png
        :alt: a lesson basic
        :srcset: /tutorial/01_basic/images/sphx_glr_a_lesson_basic_002.png
        :class: sphx-glr-single-img
     


   .. tab-item:: Interactive Scene



       .. offlineviewer:: /home/runner/work/pyvista-tutorial/pyvista-tutorial/doc/source/tutorial/01_basic/images/sphx_glr_a_lesson_basic_002.vtksz






.. GENERATED FROM PYTHON SOURCE LINES 64-74

Read from a file
~~~~~~~~~~~~~~~~
You can read datasets directly from a file if you have access to it on your
environment. This can be one of the many file formats that VTK supports, and
many more that it doesn't as PyVista can rely on libraries like `meshio
<https://github.com/nschloe/meshio>`_.

In the following example, we load VTK's iron protein dataset `ironProt.vtk
<https://github.com/naucoin/VTKData/blob/master/Data/ironProt.vtk>`_ from a
file using :func:`pyvista.read`.

.. GENERATED FROM PYTHON SOURCE LINES 74-78

.. code-block:: Python


    dataset = pv.read("ironProt.vtk")
    dataset






.. raw:: html

    <div class="output_subarea output_html rendered_html output_result">
    <div><style>/* PyVista HTML repr stylesheet.
     * Uses pv- prefix to avoid conflicts with other libraries.
     */

    :root {
      --pv-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));
      --pv-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.6));
      --pv-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.55));
      --pv-border-color: var(--jp-border-color2, #e0e0e0);
      --pv-disabled-color: var(--jp-layout-color3, #bdbdbd);
      --pv-background-color: var(--jp-layout-color0, #ffffff);
      --pv-background-color-row-even: var(--jp-layout-color1, #f5f5f5);
      --pv-background-color-row-odd: var(--jp-layout-color2, #eeeeee);
      --pv-badge-active: #1b5e20;
      --pv-badge-normals: #0d47a1;
      --pv-badge-vectors: #00695c;
      --pv-badge-tcoords: #4527a0;
    }

    body[data-jp-theme-light="false"] {
      --pv-font-color0: var(--jp-content-font-color0, rgba(255, 255, 255, 1));
      --pv-font-color2: var(--jp-content-font-color2, rgba(255, 255, 255, 0.6));
      --pv-font-color3: var(--jp-content-font-color3, rgba(255, 255, 255, 0.55));
      --pv-border-color: var(--jp-border-color2, #424242);
      --pv-disabled-color: var(--jp-layout-color3, #616161);
      --pv-background-color: var(--jp-layout-color0, #1a1a1a);
      --pv-background-color-row-even: var(--jp-layout-color1, #1f1f1f);
      --pv-background-color-row-odd: var(--jp-layout-color2, #2a2a2a);
      --pv-badge-active: #66bb6a;
      --pv-badge-normals: #64b5f6;
      --pv-badge-vectors: #4db6ac;
      --pv-badge-tcoords: #b39ddb;
    }

    /* Values here are deliberately hardcoded rather than written as
     * var(--jp-*, fallback), because a var() fallback only applies when the variable
     * is *undefined*, not when it is defined with a value belonging to the other
     * theme. Custom properties inherit, so a host that defines the --jp-* variables
     * light-only on :root would have those light values resolve here, and the dark
     * fallback would never be reached. Do not "simplify" these into var() chains.
     */
    html[theme="dark"],
    html[data-theme="dark"],
    body[data-theme="dark"],
    body.vscode-dark {
      --pv-font-color0: rgba(255, 255, 255, 1);
      --pv-font-color2: rgba(255, 255, 255, 0.6);
      --pv-font-color3: rgba(255, 255, 255, 0.55);
      --pv-border-color: #424242;
      --pv-disabled-color: #616161;
      --pv-background-color: #1a1a1a;
      --pv-background-color-row-even: #1f1f1f;
      --pv-background-color-row-odd: #2a2a2a;
      --pv-badge-active: #66bb6a;
      --pv-badge-normals: #64b5f6;
      --pv-badge-vectors: #4db6ac;
      --pv-badge-tcoords: #b39ddb;
    }

    /* OS-level dark mode fallback: applies when no explicit data-theme is set.
     * Keep these values identical to the explicit dark block above, and hardcoded
     * for the same reason.
     */
    @media (prefers-color-scheme: dark) {
      html:not([data-theme="light"]) {
        --pv-font-color0: rgba(255, 255, 255, 1);
        --pv-font-color2: rgba(255, 255, 255, 0.6);
        --pv-font-color3: rgba(255, 255, 255, 0.55);
        --pv-border-color: #424242;
        --pv-disabled-color: #616161;
        --pv-background-color: #1a1a1a;
        --pv-background-color-row-even: #1f1f1f;
        --pv-background-color-row-odd: #2a2a2a;
        --pv-badge-active: #66bb6a;
        --pv-badge-normals: #64b5f6;
        --pv-badge-vectors: #4db6ac;
        --pv-badge-tcoords: #b39ddb;
      }
    }

    /* The background is set explicitly so that it is always resolved from the same
     * theme block as the text color. Without it the repr inherits the host's
     * background, which can disagree with our text color and render the repr
     * unreadable -- e.g. on docs.pyvista.org, where pydata-sphinx-theme gives HTML
     * cell outputs a light background in dark mode.
     *
     * A host can opt out and let the repr blend into its own surface by overriding
     * --pv-background-color, or by neutralising whatever backdrop it applies. The
     * PyVista docs do the latter in doc/source/_static/jupyter_sphinx_theme.css.
     */
    .pv-wrap {
      display: block !important;
      min-width: 300px;
      max-width: 700px;
      line-height: 1.6;
      padding: 6px 8px 8px 8px;
      box-sizing: border-box;
      border-radius: 3px;
      font-family: var(--jp-ui-font-family, sans-serif);
      font-size: var(--jp-ui-font-size1, 13px);
      color: var(--pv-font-color0);
      background-color: var(--pv-background-color);
    }

    .pv-text-repr-fallback {
      display: none;
    }

    /* Header */
    .pv-header {
      display: flex;
      align-items: center;
      gap: 8px;
      padding-top: 6px;
      padding-bottom: 6px;
      border-bottom: solid 1px var(--pv-border-color);
      margin-bottom: 4px;
    }

    .pv-header-text {
      display: flex;
      flex-direction: column;
      gap: 1px;
      min-width: 0;
      flex: 1;
    }

    .pv-obj-type {
      font-weight: 600;
      color: var(--pv-font-color0);
    }

    .pv-header-badge {
      display: inline-block;
      font-size: 0.75em;
      font-weight: 600;
      padding: 2px 7px;
      border-radius: 3px;
      color: var(--pv-font-color2);
      border: 1px solid var(--pv-border-color);
      white-space: nowrap;
    }

    /* Metadata (always-visible key-value rows) */
    .pv-metadata {
      margin: 4px 0 6px 0;
      font-size: 0.92em;
      line-height: 1.5;
    }

    .pv-meta-row {
      display: flex;
      flex-wrap: wrap;
      gap: 1px 14px;
      padding: 1px 0;
    }

    .pv-meta-row-label {
      color: var(--pv-font-color2);
      font-weight: 500;
      white-space: nowrap;
      min-width: 60px;
    }

    .pv-meta-entry {
      white-space: nowrap;
    }

    /* Copy-to-clipboard button */
    /* opacity compounds with the alpha of --pv-font-color3, so keep it high enough
     * that this control still clears the 3:1 non-text contrast minimum.
     */
    .pv-copy-btn {
      display: inline-block;
      cursor: pointer;
      opacity: 0.75;
      font-size: 0.85em;
      padding: 0 3px;
      vertical-align: middle;
      transition: opacity 0.15s;
      user-select: none;
      border: none;
      background: none;
      color: var(--pv-font-color3);
    }

    .pv-copy-btn:hover {
      opacity: 1;
      color: var(--pv-font-color0);
    }

    .pv-meta-label {
      color: var(--pv-font-color3);
      font-weight: 400;
      padding-right: 2px;
    }

    /* Sections grid */
    .pv-sections {
      padding-left: 0 !important;
      display: grid;
      grid-template-columns: 150px auto auto auto 1fr 20px 20px;
      margin-block-start: 0;
      margin-block-end: 0;
      list-style: none;
    }

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

    /* Hidden checkbox for expand/collapse */
    .pv-section-item > input {
      display: block;
      opacity: 0;
      height: 0;
      margin: 0;
    }

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

    .pv-section-item > input:enabled + label {
      cursor: pointer;
      color: var(--pv-font-color2);
    }

    .pv-section-item > input:enabled + label:hover {
      color: var(--pv-font-color0);
    }

    /* Section summary (left column label) */
    .pv-section-summary {
      grid-column: 1;
      color: var(--pv-font-color2);
      font-weight: 500;
      white-space: nowrap;
    }

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

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

    /* Expand/collapse arrows */
    .pv-section-summary-in + label:before {
      display: inline-block;
      content: "\25b6";
      font-size: 11px;
      width: 15px;
      text-align: center;
    }

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

    .pv-section-summary-in:checked + label:before {
      content: "\25bc";
    }

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

    .pv-section-summary,
    .pv-section-inline-details {
      padding-top: 4px;
    }

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

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

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

    .pv-section-summary-in:checked ~ .pv-section-inline-details {
      display: none;
    }

    .pv-section-summary-in:checked ~ .pv-section-details {
      display: block;
    }

    .pv-section-summary-in:checked ~ .pv-section-details:has(.pv-var-list) {
      display: contents;
    }

    /* Variable (array) list */
    .pv-var-list,
    .pv-var-item {
      display: contents;
    }

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

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

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

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

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

    .pv-var-range {
      grid-column: 4;
      color: var(--pv-font-color3);
      font-size: 0.92em;
    }

    .pv-var-badges {
      grid-column: 5;
      padding-left: 8px;
    }

    .pv-var-name,
    .pv-var-dims,
    .pv-var-dtype,
    .pv-var-range {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      padding-right: 10px;
    }

    .pv-var-name:hover,
    .pv-var-dims:hover,
    .pv-var-dtype:hover,
    .pv-var-range:hover {
      overflow: visible;
      width: auto;
      z-index: 1;
    }

    .pv-var-name span {
      padding-left: 25px !important;
    }

    .pv-var-name-active span {
      font-weight: 600;
    }

    /* Badges */
    .pv-badge {
      display: inline-block;
      font-size: 0.75em;
      font-weight: 600;
      padding: 1px 5px;
      border-radius: 3px;
      vertical-align: middle;
      line-height: 1.4;
    }

    .pv-badge-active {
      color: var(--pv-badge-active);
      border: 1px solid var(--pv-badge-active);
    }

    .pv-badge-normals {
      color: var(--pv-badge-normals);
      border: 1px solid var(--pv-badge-normals);
    }

    .pv-badge-vectors {
      color: var(--pv-badge-vectors);
      border: 1px solid var(--pv-badge-vectors);
    }

    .pv-badge-tcoords {
      color: var(--pv-badge-tcoords);
      border: 1px solid var(--pv-badge-tcoords);
    }

    /* Logo and Icons */
    .pv-logo {
      display: flex;
      align-items: center;
      flex-shrink: 0;
    }

    .pv-logo svg {
      width: 28px;
      height: 28px;
    }

    .pv-brand-logo {
      display: flex;
      align-items: center;
      flex-shrink: 0;
    }

    .pv-brand-logo svg {
      height: 20px;
      width: auto;
    }

    /* Children list (MultiBlock / PartitionedDataSet) */
    .pv-children-list {
      padding-left: 25px !important;
      list-style: none;
    }

    .pv-children-list li {
      padding: 1px 0;
    }

    .pv-child-name {
      font-weight: 500;
    }

    .pv-child-type {
      color: var(--pv-font-color2);
      font-style: italic;
    }

    .pv-child-type:before {
      content: "\00b7";
      padding: 0 6px;
      font-style: normal;
    }

    .pv-child-detail {
      color: var(--pv-font-color3);
      font-size: 0.9em;
    }

    .pv-child-detail:not(:empty):before {
      content: "\00b7";
      padding: 0 6px;
    }
    </style><pre class='pv-text-repr-fallback'>ImageData (0x7f1fb75a3100)
      N Cells:      300763
      N Points:     314432
      X Bounds:     0.000e+00, 6.700e+01
      Y Bounds:     0.000e+00, 6.700e+01
      Z Bounds:     0.000e+00, 6.700e+01
      Dimensions:   68, 68, 68
      Spacing:      1.000e+00, 1.000e+00, 1.000e+00
      N Arrays:     1</pre><div class='pv-wrap' style='display:none'><div class='pv-header'><span class='pv-logo'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
      <defs>
        <linearGradient id="pv-id-top" x1="0" y1="0" x2="1" y2="1">
          <stop offset="0%" stop-color="#ffd040"/>
          <stop offset="100%" stop-color="#376fa0"/>
        </linearGradient>
        <linearGradient id="pv-id-left" x1="0" y1="0" x2="0" y2="1">
          <stop offset="0%" stop-color="#376fa0"/>
          <stop offset="100%" stop-color="#1a4a70"/>
        </linearGradient>
        <linearGradient id="pv-id-right" x1="0" y1="0" x2="0" y2="1">
          <stop offset="0%" stop-color="#ffd040"/>
          <stop offset="100%" stop-color="#d4442a"/>
        </linearGradient>
      </defs>
      <polygon points="16,2 28,8 16,14 4,8" fill="url(#pv-id-top)"/>
      <polygon points="4,8 16,14 16,28 4,22" fill="url(#pv-id-left)"/>
      <polygon points="28,8 16,14 16,28 28,22" fill="url(#pv-id-right)"/>
      <g stroke="rgba(255,255,255,0.45)" stroke-width="0.4" fill="none">
        <polygon points="16,2 28,8 16,14 4,8"/>
        <line x1="16" y1="14" x2="16" y2="28"/>
        <line x1="4" y1="8" x2="4" y2="22"/>
        <line x1="28" y1="8" x2="28" y2="22"/>
        <line x1="4" y1="22" x2="16" y2="28"/>
        <line x1="28" y1="22" x2="16" y2="28"/>
        <line x1="12" y1="4" x2="24" y2="10"/>
        <line x1="8" y1="6" x2="20" y2="12"/>
        <line x1="20" y1="4" x2="8" y2="10"/>
        <line x1="24" y1="6" x2="12" y2="12"/>
        <line x1="4" y1="12.67" x2="16" y2="18.67"/>
        <line x1="4" y1="17.33" x2="16" y2="23.33"/>
        <line x1="8" y1="10" x2="8" y2="24"/>
        <line x1="12" y1="12" x2="12" y2="26"/>
        <line x1="28" y1="12.67" x2="16" y2="18.67"/>
        <line x1="28" y1="17.33" x2="16" y2="23.33"/>
        <line x1="24" y1="10" x2="24" y2="24"/>
        <line x1="20" y1="12" x2="20" y2="26"/>
      </g>
    </svg>
    </span><div class='pv-header-text'><div class='pv-obj-type'>ImageData <span class='pv-header-badge'>314,432 points</span> <span class='pv-header-badge'>300,763 cells</span> <span class='pv-header-badge'>308 KiB</span></div></div><span class='pv-brand-logo'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90 24">
      <text x="0" y="18" font-family="system-ui,-apple-system,sans-serif" font-size="18" font-weight="700" font-style="italic" letter-spacing="-0.5">
        <tspan fill="#3776AB" opacity="0.7">P</tspan><tspan fill="#FFD43B" opacity="0.7">y</tspan><tspan fill="#008c9e">Vista</tspan>
      </text>
    </svg>
    </span></div><div class='pv-metadata'><div class='pv-meta-row pv-copyable'><span class='pv-meta-row-label'>Bounds</span><button class='pv-copy-btn' title='Copy to clipboard' data-copy='(0.0, 67.0, 0.0, 67.0, 0.0, 67.0)' onclick="navigator.clipboard.writeText(this.dataset.copy)">⧉</button><span class='pv-meta-entry'><span class='pv-meta-label'>X</span> [0.000e+00, 6.700e+01]</span><span class='pv-meta-entry'><span class='pv-meta-label'>Y</span> [0.000e+00, 6.700e+01]</span><span class='pv-meta-entry'><span class='pv-meta-label'>Z</span> [0.000e+00, 6.700e+01]</span></div><div class='pv-meta-row pv-copyable'><span class='pv-meta-row-label'>Grid</span><span class='pv-meta-entry'><span class='pv-meta-label'>dims</span> 68 x 68 x 68</span><span class='pv-meta-entry'><span class='pv-meta-label'>spacing</span> (1.000e+00, 1.000e+00, 1.000e+00)</span></div></div><ul class='pv-sections'><li class='pv-section-item'><input id='section-2539eb71-3e0d-4706-bce9-b5a480705eca' class='pv-section-summary-in' type='checkbox' checked /><label for='section-2539eb71-3e0d-4706-bce9-b5a480705eca' class='pv-section-summary' title='Expand/collapse section'>Point Data: <span>(1)</span></label><div class='pv-section-inline-details'>scalars <span class='pv-badge pv-badge-active'>active</span></div><div class='pv-section-details'><ul class='pv-var-list'><li class='pv-var-item'><div class='pv-var-name pv-var-name-active'><span>scalars</span><button class='pv-copy-btn' title='Copy to clipboard' data-copy='scalars' onclick="navigator.clipboard.writeText(this.dataset.copy)">⧉</button></div><div class='pv-var-dims'>scalar</div><div class='pv-var-dtype'>uint8</div><div class='pv-var-range'>[0.000e+00, 2.550e+02]</div><div class='pv-var-badges'> <span class='pv-badge pv-badge-active'>active</span></div></li></ul></div></li></ul></div></div>
    </div>
    <br />
    <br />

.. GENERATED FROM PYTHON SOURCE LINES 79-81

This is again a :class:`pyvista.ImageData` and we can plot it volumetrically
with:

.. GENERATED FROM PYTHON SOURCE LINES 81-84

.. code-block:: Python


    dataset.plot(volume=True)








.. tab-set::



   .. tab-item:: Static Scene



            
     .. image-sg:: /tutorial/01_basic/images/sphx_glr_a_lesson_basic_003.png
        :alt: a lesson basic
        :srcset: /tutorial/01_basic/images/sphx_glr_a_lesson_basic_003.png
        :class: sphx-glr-single-img
     


   .. tab-item:: Interactive Scene



       .. offlineviewer:: /home/runner/work/pyvista-tutorial/pyvista-tutorial/doc/source/tutorial/01_basic/images/sphx_glr_a_lesson_basic_003.vtksz






.. GENERATED FROM PYTHON SOURCE LINES 85-92

.. raw:: html

    <center>
      <a target="_blank" href="https://colab.research.google.com/github/pyvista/pyvista-tutorial/blob/tutorial/notebooks/01_basic/a_lesson_basic.ipynb">
        <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/ width="150px">
      </a>
    </center>


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

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


.. _sphx_glr_download_tutorial_01_basic_a_lesson_basic.py:

.. only:: html

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

    .. container:: binder-badge

      .. image:: images/binder_badge_logo.svg
        :target: https://mybinder.org/v2/gh/pyvista/pyvista-tutorial/tutorial?urlpath=lab/tree/notebooks/tutorial/01_basic/a_lesson_basic.ipynb
        :alt: Launch binder
        :width: 150 px

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

      :download:`Download Jupyter notebook: a_lesson_basic.ipynb <a_lesson_basic.ipynb>`

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

      :download:`Download Python source code: a_lesson_basic.py <a_lesson_basic.py>`

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

      :download:`Download zipped: a_lesson_basic.zip <a_lesson_basic.zip>`


.. only:: html

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

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