.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "content/user_guide/auto_examples/2cross/plot_rotated_mca.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_content_user_guide_auto_examples_2cross_plot_rotated_mca.py: Rotated Maximum Covariance Analysis =================================== Rotated Maximum Covariance Analysis (MCA) between two data sets. .. GENERATED FROM PYTHON SOURCE LINES 7-18 .. code-block:: default # Load packages and data: import matplotlib.pyplot as plt import numpy as np import xarray as xr from cartopy.crs import Orthographic, PlateCarree from cartopy.feature import LAND from matplotlib.gridspec import GridSpec import xeofs as xe .. GENERATED FROM PYTHON SOURCE LINES 19-20 Create 2 different DataArrays .. GENERATED FROM PYTHON SOURCE LINES 20-25 .. code-block:: default t2m = xr.tutorial.load_dataset("air_temperature")["air"] da1 = t2m.isel(lon=slice(0, 26)) da2 = t2m.isel(lon=slice(27, None)) .. GENERATED FROM PYTHON SOURCE LINES 26-27 Perform MCA .. GENERATED FROM PYTHON SOURCE LINES 27-31 .. code-block:: default mca = xe.cross.MCA(n_modes=20, standardize=False, use_coslat=True) mca.fit(da1, da2, dim="time") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 32-33 Apply Varimax-rotation to MCA solution .. GENERATED FROM PYTHON SOURCE LINES 33-37 .. code-block:: default rot = xe.cross.MCARotator(n_modes=10) rot.fit(mca) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 38-40 Get rotated singular vectors, projections (PCs), homogeneous and heterogeneous patterns: .. GENERATED FROM PYTHON SOURCE LINES 40-46 .. code-block:: default singular_vectors = rot.components() scores = rot.scores() hom_pats, pvals_hom = rot.homogeneous_patterns() het_pats, pvals_het = rot.heterogeneous_patterns() .. GENERATED FROM PYTHON SOURCE LINES 47-51 When two fields are expected, the output of the above methods is a list of length 2, with the first and second entry containing the relevant object for ``X`` and ``Y``. For example, the p-values obtained from the two-sided t-test for the homogeneous patterns of ``X`` are: .. GENERATED FROM PYTHON SOURCE LINES 51-54 .. code-block:: default pvals_hom[0] .. raw:: html
<xarray.DataArray 'pvalues_of_left_homogeneous_patterns' (mode: 10, lat: 25,
                                                              lon: 26)>
    1.562e-89 1.552e-68 7.788e-62 2.969e-52 ... 0.002105 0.005704 0.01526 0.03629
    Coordinates:
      * lat      (lat) float32 15.0 17.5 20.0 22.5 25.0 ... 65.0 67.5 70.0 72.5 75.0
      * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 255.0 257.5 260.0 262.5
      * mode     (mode) int64 1 2 3 4 5 6 7 8 9 10
    Attributes: (9)


.. GENERATED FROM PYTHON SOURCE LINES 55-56 Create a mask to identifiy where p-values are below 0.05 .. GENERATED FROM PYTHON SOURCE LINES 56-61 .. code-block:: default hom_mask = [values < 0.05 for values in pvals_hom] het_mask = [values < 0.05 for values in pvals_het] .. GENERATED FROM PYTHON SOURCE LINES 62-63 Plot some relevant quantities of mode 2. .. GENERATED FROM PYTHON SOURCE LINES 63-119 .. code-block:: default lonlats = [ np.meshgrid(pvals_hom[0].lon.values, pvals_hom[0].lat.values), np.meshgrid(pvals_hom[1].lon.values, pvals_hom[1].lat.values), ] proj = [ Orthographic(central_latitude=30, central_longitude=-120), Orthographic(central_latitude=30, central_longitude=-60), ] kwargs1 = {"cmap": "BrBG", "vmin": -0.05, "vmax": 0.05, "transform": PlateCarree()} kwargs2 = {"cmap": "RdBu", "vmin": -1, "vmax": 1, "transform": PlateCarree()} mode = 2 fig = plt.figure(figsize=(7, 14)) gs = GridSpec(5, 2) ax1 = [fig.add_subplot(gs[0, i], projection=proj[i]) for i in range(2)] ax2 = [fig.add_subplot(gs[1, i], projection=proj[i]) for i in range(2)] ax3 = [fig.add_subplot(gs[2, i], projection=proj[i]) for i in range(2)] ax4 = [fig.add_subplot(gs[3, i]) for i in range(2)] for i, a in enumerate(ax1): singular_vectors[i].sel(mode=mode).plot(ax=a, **kwargs1) for i, a in enumerate(ax2): hom_pats[i].sel(mode=mode).plot(ax=a, **kwargs2) a.scatter( lonlats[i][0], lonlats[i][1], hom_mask[i].sel(mode=mode).values * 0.5, color="k", alpha=0.5, transform=PlateCarree(), ) for i, a in enumerate(ax3): het_pats[i].sel(mode=mode).plot(ax=a, **kwargs2) a.scatter( lonlats[i][0], lonlats[i][1], het_mask[i].sel(mode=mode).values * 0.5, color="k", alpha=0.5, transform=PlateCarree(), ) for i, a in enumerate(ax4): scores[i].sel(mode=mode).plot(ax=a) a.set_xlabel("") for a in np.ravel([ax1, ax2, ax3]): a.coastlines(color=".5") a.add_feature(LAND) plt.tight_layout() plt.savefig("rotated_mca.jpg") .. image-sg:: /content/user_guide/auto_examples/2cross/images/sphx_glr_plot_rotated_mca_001.png :alt: mode = 2, mode = 2, mode = 2, mode = 2, mode = 2, mode = 2, mode = 2, mode = 2 :srcset: /content/user_guide/auto_examples/2cross/images/sphx_glr_plot_rotated_mca_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 4.585 seconds) .. _sphx_glr_download_content_user_guide_auto_examples_2cross_plot_rotated_mca.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_rotated_mca.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_rotated_mca.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_