From e3070ddc66bfd8d04c75a14ba6ee928566e0c102 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Tue, 8 Oct 2024 19:25:52 +0000 Subject: [PATCH 01/12] docs: use myst-nb --- .pre-commit-config.yaml | 6 ------ docs/conf.py | 6 +++--- pyproject.toml | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7f3de70..d293c16 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -32,12 +32,6 @@ repos: # - id: doc8 # stages: [pre-commit] - - repo: https://github.com/FHPythonUtils/LicenseCheck - rev: "2023.1.1" - hooks: - - id: licensecheck - stages: [pre-commit] - - repo: https://github.com/codespell-project/codespell rev: v2.2.4 hooks: diff --git a/docs/conf.py b/docs/conf.py index 318fe6c..45e1d5d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -33,7 +33,7 @@ "sphinx_copybutton", "autoapi.extension", "jupyter_sphinx", - "nbsphinx", + "myst_nb", "_extension.docstring", ] exclude_patterns = ["**.ipynb_checkpoints"] @@ -123,8 +123,8 @@ # -- options for the autolabel extension --------------------------------------- autosectionlabel_prefix_document = True -# -- options for nbsphinx ------------------------------------------------------ -nbsphinx_execute = "never" +# -- options for myst-nb ------------------------------------------------------ +nb_execution_mode = "off" # -- Script to authenticate to Earthengine using a token ----------------------- def gee_configure() -> None: diff --git a/pyproject.toml b/pyproject.toml index ef7ff85..dbe3d73 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,7 +76,7 @@ doc = [ "ipykernel", "httplib2", "jupyter-sphinx", - "nbsphinx", + "myst-nb", ] [tool.hatch.build.targets.wheel] From b03f6100bd4f0cdd36d522fb8213bf4b817dc5d2 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Wed, 9 Oct 2024 12:37:16 +0000 Subject: [PATCH 02/12] docs: execute the notebooks at build time --- .pre-commit-config.yaml | 6 + docs/conf.py | 42 +- docs/example/index.rst | 44 -- docs/example/plot_featureCollection.ipynb | 527 ------------------- docs/index.rst | 2 +- docs/{usage => setup}/author.rst | 0 docs/{usage => setup}/contribute.rst | 0 docs/setup/index.rst | 46 ++ docs/{usage => setup}/inspiration.rst | 0 docs/{usage => setup}/install.rst | 0 docs/{usage => setup}/layout.rst | 0 docs/{usage => setup}/license.rst | 0 docs/{usage => setup}/migration.rst | 0 docs/{usage => setup}/pattern.rst | 0 docs/{usage => setup}/quickstart.rst | 0 docs/{example => usage}/asset.ipynb | 0 docs/usage/asset/index.rst | 0 docs/usage/index.rst | 53 +- docs/usage/plot/index.rst | 13 + docs/usage/plot/map-featurecollection.ipynb | 58 ++ docs/usage/plot/map-image.ipynb | 27 + docs/usage/plot/plot-featurecollection.ipynb | 449 ++++++++++++++++ docs/usage/plot/plot-image.ipynb | 27 + docs/usage/plot/plot-imagecollection.ipynb | 27 + docs/{example => usage}/template.ipynb | 0 pyproject.toml | 1 + 26 files changed, 689 insertions(+), 633 deletions(-) delete mode 100644 docs/example/index.rst delete mode 100644 docs/example/plot_featureCollection.ipynb rename docs/{usage => setup}/author.rst (100%) rename docs/{usage => setup}/contribute.rst (100%) create mode 100644 docs/setup/index.rst rename docs/{usage => setup}/inspiration.rst (100%) rename docs/{usage => setup}/install.rst (100%) rename docs/{usage => setup}/layout.rst (100%) rename docs/{usage => setup}/license.rst (100%) rename docs/{usage => setup}/migration.rst (100%) rename docs/{usage => setup}/pattern.rst (100%) rename docs/{usage => setup}/quickstart.rst (100%) rename docs/{example => usage}/asset.ipynb (100%) create mode 100644 docs/usage/asset/index.rst create mode 100644 docs/usage/plot/index.rst create mode 100644 docs/usage/plot/map-featurecollection.ipynb create mode 100644 docs/usage/plot/map-image.ipynb create mode 100644 docs/usage/plot/plot-featurecollection.ipynb create mode 100644 docs/usage/plot/plot-image.ipynb create mode 100644 docs/usage/plot/plot-imagecollection.ipynb rename docs/{example => usage}/template.ipynb (100%) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d293c16..76ad97a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,3 +39,9 @@ repos: stages: [pre-commit] additional_dependencies: - tomli + + - repo: "https://github.com/kynan/nbstripout" + rev: "0.5.0" + hooks: + - id: nbstripout + stages: [pre-commit] diff --git a/docs/conf.py b/docs/conf.py index 45e1d5d..e664177 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -7,12 +7,11 @@ # -- Path setup ---------------------------------------------------------------- import os -import re import sys from datetime import datetime from pathlib import Path -import ee +import pytest_gee # add . to sys to import local extensions sys.path.append(str(Path(".").resolve())) @@ -124,40 +123,17 @@ autosectionlabel_prefix_document = True # -- options for myst-nb ------------------------------------------------------ -nb_execution_mode = "off" +# nb_execution_mode = "off" # -- Script to authenticate to Earthengine using a token ----------------------- def gee_configure() -> None: - """Initialize earth engine according to the environment. - - It will use the creddential file if the EARTHENGINE_TOKEN env variable exist. - Otherwise it use the simple Initialize command (asking the user to register if necessary). - """ - # only do the initialization if the credential are missing - if False: - # if not ee.data._credentials: - - # if the credentials token is asved in the environment use it - if "EARTHENGINE_TOKEN" in os.environ: - - # get the token from environment variable - ee_token = os.environ["EARTHENGINE_TOKEN"] - - # as long as RDT quote the token, we need to remove the quotes before writing - # the string to the file - pattern = r"^'[^']*'$" - if re.match(pattern, ee_token) is not None: - ee_token = ee_token[1:-1] - - # write the token to the appropriate folder - credential_folder_path = Path.home() / ".config" / "earthengine" - credential_folder_path.mkdir(parents=True, exist_ok=True) - credential_file_path = credential_folder_path / "credentials" - credential_file_path.write_text(ee_token) - - # if the user is in local development the authentication should - # already be available - ee.Initialize() + """Initialize earth engine according to the environment.""" + if "EARTHENGINE_PROJECT" in os.environ: + pytest_gee.init_ee_from_token() + elif "EARTHENGINE_SERVICE_ACCOUNT" in os.environ: + pytest_gee.init_ee_from_service_account() + else: + raise ValueError("Cannot authenticate with Earth Engine.") gee_configure() diff --git a/docs/example/index.rst b/docs/example/index.rst deleted file mode 100644 index 9891cc5..0000000 --- a/docs/example/index.rst +++ /dev/null @@ -1,44 +0,0 @@ -Examples -======== - -Overview --------- - -This section gathered may real lif example of the Lib usage gathered by the community. -If you think your workflow should be shared please open a PR and follow the contribution guildelines shared in the next section. - -.. warning:: - - The example gallery is a work in progress as the library was recently refactored. - All contributions are welcolmed! - -Add a new example ------------------ - -.. image:: /_static/we-need-you.jpg - :alt: We need you! - :align: center - -Currently most of the examples built by `@Rodrigo `__ are still using the old implementation of the library. -They should be transformed into modern example and moved from the old `notebook `__ folder to the new `example `__ one to be displayed in our doc. - -The examples are regular notebook files that are interpreted by the nbsphinx lib and displayed in the doc, clicking on the :guilabel:`open in colab` button will open a colab notebook with the code ready to be executed and the :guilabel:`view source` will bring you back to github. - -To add a new example, you can use the `example template `__ and replace things with your code. - -Adapt the code of the 2 first buttons to your file so users can lunch it in collab and view the source in github. - -.. code-block:: md - - [![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee_community/geetools/blob/main/docs/example/template.ipynb) - [![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee_community/gee_tools/blob/main/docs/example/template.ipynb) - - -Then you can open a PR with the new file and it will be reviewed and merged. - -.. toctree:: - :hidden: - - template - asset - plot_featureCollection \ No newline at end of file diff --git a/docs/example/plot_featureCollection.ipynb b/docs/example/plot_featureCollection.ipynb deleted file mode 100644 index 3995018..0000000 --- a/docs/example/plot_featureCollection.ipynb +++ /dev/null @@ -1,527 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Plot `ee.FeatureCollection` objects using matplotlib\n", - "\n", - "The `geetools` extension contains a set of functions for rendering charts from `ee.FeatureCollection` objects. The choice of function determines the arrangement of data in the chart, i.e., what defines x- and y-axis values and what defines the series. Use the following function descriptions and examples to determine the best function and chart type for your purpose." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geetools/blob/main/docs/example/plot_featureCollection.ipynb)\n", - "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee-community/geetools/blob/main/docs/example/plot_featureCollection.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up environment\n", - "\n", - "Install all the required libs if necessary and perform the import statements upstream." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# uncomment if installation of libs is necessary\n", - "# !pip install earthengine-api geetools" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from matplotlib import pyplot as plt\n", - "\n", - "import ee\n", - "import geetools #noqa: F401" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# uncomment if authetication to GEE is needed\n", - "# ee.Authenticate()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# uncomment if initialization is required\n", - "# ee.Initialize()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example data\n", - "\n", - "The following examples rely on a FeatureCollection composed of three ecoregion features with properties that describe climate normals." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Import the example feature collection.\n", - "ecoregions = ee.FeatureCollection('projects/google/charts_feature_example')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ee.FeatureCollection.geetools.plot_by_features\n", - "\n", - "### Column chart\n", - "\n", - "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by adjacent columns defined by a list of property names whose values are plotted along the y-axis." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Q+/evVG5cmWsXLkSJiYmWLdunbqjERERERV7euoOoKjMzEycP38e48aNE9t0dHTQvHlznDx5ssBlMjIykJGRIU6npKQAALKyspCVlaXawB+h7LbZn/0LQ9Nys7929de2HEVF0z4nbe+vDH19fZWtm6QjEwRBUHcIRdy/fx+lSpXCiRMnUK9ePbF9zJgxOHLkCE6fPp1vmSlTpmDq1Kn52jdu3AgTExOV5iUiooLNffNa4b4/GhmjV3yEwv3XewThhO4qhfvXzxmgcF9Sr/bt26s7AilAa0YsC2PcuHEYOXKkOJ2SkgJnZ2e0bNkSFhYWakxGRFR8zd2+TeG+AQEBgBKFZUBAAE7sVbywDAgIULgvEX2a1hSWJUuWhK6uLh49eiTX/ujRIzg4OBS4jKGhIQwNDfO16+vrc0idiEgLKPtdrer+RPRxWnPxjoGBAWrUqIGDBw+Kbbm5uTh48KDcoXEiIiIiUg+tGbEEgJEjR6JXr16oWbMmateujcWLFyMtLQ29e/dWdzQiIiKiYk+rCssuXbrgyZMnmDRpEh4+fIiqVasiKioK9vb26o5GREREVOxpVWEJACEhIQgJCVF3DCIiIiJ6j9acY0lEREREmo2FJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSUJP3QGIiIg+5uXYzeqOQEQK4oglEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUlCT90BiIioeDnRpau6IxCRinDEkoiIiIgkwcKSiIiIiCTBwpKIiIiIJCETBEFQd4iikpKSAktLS7x69QoWFhbqjkNERET0ReGIJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSYKFJRERERFJgoUlEREREUmChSURERERSUJrCktXV1fIZDK5nzlz5qg7FhERERH9f3rqDqCM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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize the plot with the ecoregions data\n", - "ecoregions.geetools.plot_by_features(\n", - " type = \"bar\",\n", - " featureId = \"label\",\n", - " properties = ['01_tmean', '02_tmean', '03_tmean', '04_tmean', '05_tmean', '06_tmean', '07_tmean', '08_tmean', '09_tmean', '10_tmean', '11_tmean', '12_tmean'],\n", - " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", - " colors = ['#604791', '#1d6b99', '#39a8a7', '#0f8755', '#76b349', '#f0af07', '#e37d05', '#cf513e', '#96356f', '#724173', '#9c4f97', '#696969'],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Average Monthly Temperature by Ecoregion\")\n", - "ax.set_xlabel(\"Ecoregion\")\n", - "ax.set_ylabel(\"Temperature (°C)\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Stacked column chart\n", - "\n", - "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by stacked columns defined by a list of property names whose values are plotted along the y-axis as the cumulative series sum." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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cjL27duHyMhIAMAnn3yCgwcPYtasWbh27Ro2bdqElStXYsKECS/d36effooTJ04gJCQEiYmJuH79On755RfpoaRGjRrB29sbo0aNwqlTp3D27FmMGjUKBgYGUCgUJbbp7+8PfX19BAQE4OLFi4iJicGHH36IYcOGSZfuiYiodExKiUh2kZGRsLW1Vfm0a9cOwLMpn9566y0MGTIErq6umDRpEgoKCgA8G/H88ccfsXXrVjRp0gTTpk3DzJkzERgY+NL9ubu74/Dhw7h27Rrat2+P5s2bY9q0abCzs5PqfPfdd7C2tkaHDh3Qr18/jBw5EsbGxtDX1y+xTUNDQ+zfvx8PHjzAW2+9hYEDB6Jr165YuXJl+XQSEVEVpxBCCLmDICKq7P7++2/Y29vj999/R9euXeUOh4ioymFSSkRUgujoaGRlZcHNzQ23b9/GpEmT8M8//+DatWvFHlYiIqLXxwediIhKkJeXh88++wx//PEHjI2N0aZNG0RERDAhJSLSEI6UEhEREZHs+KATEREREcmOSSkRERERyY5JKRERERHJjkkpEREREcmOSSkRERERyY5JKRERERHJjkkpEREREcmOSSkRERERyY5JKRERERHJ7v8BfeuepNTEnRAAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize theplot with the ecoregions data\n", - "ecoregions.geetools.plot_by_features(\n", - " type = \"stacked\",\n", - " featureId = \"label\",\n", - " properties = ['01_ppt', '02_ppt', '03_ppt', '04_ppt', '05_ppt', '06_ppt', '07_ppt', '08_ppt', '09_ppt', '10_ppt', '11_ppt', '12_ppt'],\n", - " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", - " colors = ['#604791', '#1d6b99', '#39a8a7', '#0f8755', '#76b349', '#f0af07', '#e37d05', '#cf513e', '#96356f', '#724173', '#9c4f97', '#696969'],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", - "ax.set_xlabel(\"Ecoregion\")\n", - "ax.set_ylabel(\"Precipitation (mm)\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Scatter chart\n", - "\n", - "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by points defined by a list of property names whose values are plotted along the y-axis." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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025qasrD60RERDVI8V1rHj58CAsLCyNXU3nl5uYCKN9lCEYNl+PGjcO6devw+++/w9raWnONpK2tLSwsLGBra4tRo0YhMjIS9vb2sLGxwfjx4xEQEIAXX3wRANC9e3f4+vpi2LBh+Pzzz5GSkoKPPvoI48aNKzVAEhERERUzMTGBpaUl0tPTYWpqCrm8Uo11NjohBHJzc5GWlgY7O7ty3ULSqFMRyWSyUttXrVqF8PBwAEVD399//3389NNPyM/PR48ePbB06VKtU95JSUl4++23ERMTAysrKwwfPhyzZ8+GiUn5sjOnIiIiIqq5Hj58iMTERKjVamOXUmnZ2dnBxcWlzOz2qEo1z6WxMFwSERHVbGq1Gg8fPjR2GZWSqalpuY5YFqsUA3qIiIiIjEkulz/TJOr0/3hhARERERFJhuGSiIiIiCTDcElEREREkmG4JCIiIiLJMFwSERERkWQYLomIiIhIMgyXRERERCQZhksiIiIikgzDJRERERFJhuGSiIiIiCTDcElEREREkmG4JCIiIiLJMFwSERERkWQYLomIiIhIMgyXRERERCQZhksiIiIikgzDJRERERFJhuGSiIiIiCTDcElEREREkmG4JCIiIiLJMFwSERERkWQYLomIiIhIMgyXRERERCQZhksiIiIikgzDJRERERFJhuGSiIiIiCTDcElEREREkmG4JCIiIiLJMFwSERERkWQYLomIiIhIMgyXRERERCQZhksiIiIikgzDJRERERFJhuGSiIiIiCTDcElEREREkmG4JCIiIiLJMFwSERERkWQYLomIiIhIMgyXRERERCQZhksiIiIikgzDJRERERFJhuGSiIiIiCTDcElEREREkmG4JCIiIiLJMFwSERERkWRMnmalgoICpKSkIDc3F46OjrC3t5e6LiIiIiKqgsp95PLevXtYtmwZOnXqBBsbG3h6esLHxweOjo7w8PDA6NGjcfz4cUPWSkRERESVXLnC5fz58+Hp6YlVq1YhKCgIv/32G+Li4nDp0iXExsYiKioKhYWF6N69O4KDg3H58mVD101ERERElZBMCCGe1Gno0KH46KOP0Lhx48f2y8/Px6pVq2BmZoaRI0dKVqShZWdnw9bWFllZWbCxsTF2OURERERVVrnCZXXHcElEREQkDY4WJyIiIiLJ6D1aPC8vD4sWLcK+ffuQlpYGtVqt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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize theplot with the ecoregions data\n", - "ecoregions.geetools.plot_by_features(\n", - " type = \"scatter\",\n", - " featureId = \"label\",\n", - " properties = ['01_ppt', '06_ppt', '09_ppt'],\n", - " labels = [\"jan\", \"jun\", \"sep\"],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", - "ax.set_xlabel(\"Ecoregion\")\n", - "ax.set_ylabel(\"Precipitation (mm)\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pie chart\n", - "\n", - "The pie is a property, each slice is the share from each feature whose value is cast as a percentage of the sum of all values of features composing the pie." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize theplot with the ecoregions data\n", - "ecoregions.geetools.plot_by_features(\n", - " type = \"pie\",\n", - " featureId = \"label\",\n", - " properties = ['06_ppt'],\n", - " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Share of precipitation in June by Ecoregion\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Donut chart\n", - "\n", - "The donut is a property, each slice is the share from each feature whose value is cast as a percentage of the sum of all values of features composing the donut." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAGbCAYAAABK0dMQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABnu0lEQVR4nO3dd3gU5doG8Htma3oPoSaBEEqA0JFepYMgRbEANlCsKIjl2I6KgqJgF49SrWAX6QLSlID0TiD0JBAIqdtm3u+PwH6GhJCEbCa7e/+ui0szOztzb3Y3++zbRhJCCBARERFdg6x1ACIiIqraWCwQERFRiVgsEBERUYlYLBAREVGJWCwQERFRiVgsEBERUYlYLBAREVGJWCwQERFRiVgsEBERUYmqRLEgSRIeeeQRrWNUqLS0NAwfPhxhYWGQJAkzZ87UOlKpjR07FjExMeW678svvwxJkio2UAm6deuGbt26Vdr5rli7di0kScLatWsr/dzFqejfe0xMDAYOHFhhx/NWVe11QlReLi0Wdu/ejeHDhyM6Ohpmsxk1a9bEzTffjPfff9+Vp60SJk6ciOXLl+PZZ5/FggUL0LdvX60jaWbq1Kn46aefyn3/ffv24eWXX0ZKSkqFZaqKvO0DOiUlBZIkXfPfm2++qXVEIrpM76oDb9q0Cd27d0edOnXwwAMPICoqCidPnsRff/2FWbNm4dFHH3XVqauEP/74A7fccgsmTZqkdZQy++yzz6Cqarnu+5///AfPPPNMoW1Tp07F8OHDMWTIkHIdc9++fXjllVfQrVu3Ii0eK1asKNcxb1SXLl2Qn58Po9Goyfk9yahRo9C/f/8i21u0aKFBmorF1wl5CpcVC6+//jqCgoKQlJSE4ODgQrelp6e76rTXlJubCz8/v0o7X3p6epHH7QqueFwGg6Hc99Xr9dDrXfayKkKrP8KyLMNsNmtybk/TsmVL3HXXXZpmcNXfB75OyFO4rBsiOTkZCQkJxX5gRkZGFnufn376CU2aNIHJZEJCQgKWLVtW6Pbjx49jwoQJaNCgAXx8fBAWFoYRI0YUaZ6eO3cuJEnCunXrMGHCBERGRqJWrVrO25cuXYrOnTvDz88PAQEBGDBgAPbu3Vuqx3X06FGMGDECoaGh8PX1xU033YQlS5YUObcQAh9++KGzSfVarjTFvv3223j33XcRHR0NHx8fdO3aFXv27Cm079ixY+Hv74/k5GT0798fAQEBuPPOOwEAqqpi5syZSEhIgNlsRrVq1TB+/HhcvHixyDmXLl2Krl27IiAgAIGBgWjTpg2++uqrQuf59zf4smS8uu9ckiTk5uZi3rx5zt/F2LFjAZTu+Zw7dy5GjBgBAOjevbvzGFf6gIsbs5Ceno777rsP1apVg9lsRmJiIubNm3fN3/vs2bNRr149mEwmtGnTBklJSdd8vq4ori+6W7duaNKkCfbt24fu3bvD19cXNWvWxPTp0697vNKe49/Z586de837du3aFYmJicXe1qBBA/Tp06dUGVasWIHmzZvDbDajcePG+OGHH5y3HT16FJIk4d133y1yv02bNkGSJHz99delOk9pXO91CwCLFi1Cq1at4OPjg/DwcNx11104ffp0oX0q4n2kqipefvll1KhRA76+vujevTv27duHmJgY5+sbuPZzWJacp0+fxpAhQ+Dv74+IiAhMmjQJiqLc4G+TqGxcVixER0dj27ZtRT5MrmXDhg2YMGECbr/9dkyfPh0WiwXDhg1DRkaGc5+kpCRs2rQJt99+O9577z08+OCDWL16Nbp164a8vLwix5wwYQL27duHF1980dk0vmDBAgwYMAD+/v6YNm0aXnjhBezbtw+dOnW6bp94WloaOnTogOXLl2PChAl4/fXXYbFYMHjwYPz4448ACpodFyxYAAC4+eabsWDBAufPJZk/fz7ee+89PPzww3j22WexZ88e9OjRA2lpaYX2czgc6NOnDyIjI/H2229j2LBhAIDx48dj8uTJ6NixI2bNmoV77rkHX375Jfr06QO73e68/9y5czFgwABcuHABzz77LN588000b968SGF2Ixn/bcGCBTCZTOjcubPzdzF+/HgApXs+u3TpgsceewwA8NxzzzmP0ahRo2LPl5+fj27dumHBggW488478dZbbyEoKAhjx47FrFmziuz/1Vdf4a233sL48ePx2muvISUlBbfeemuh31lZXLx4EX379kViYiJmzJiBhg0bYsqUKVi6dGm5jlded999N3bt2lXk/ZeUlIRDhw6V6pv84cOHcdttt6Ffv3544403oNfrMWLECKxcuRIAULduXXTs2BFffvllkft++eWXCAgIwC233HLd8+Tl5eH8+fNF/jkcDuc+pXndzp07FyNHjoROp8Mbb7yBBx54AD/88AM6deqEzMzMQue80ffRs88+i1deeQWtW7fGW2+9hfr166NPnz7Izc297uMtS05FUdCnTx+EhYXh7bffRteuXTFjxgzMnj37uuchqlDCRVasWCF0Op3Q6XSiffv24umnnxbLly8XNputyL4AhNFoFEeOHHFu27lzpwAg3n//fee2vLy8IvfdvHmzACDmz5/v3DZnzhwBQHTq1Ek4HA7n9uzsbBEcHCweeOCBQsdITU0VQUFBRbZf7YknnhAAxPr16wsdMzY2VsTExAhFUQo9pocffrjE4wkhxLFjxwQA4ePjI06dOuXc/vfffwsAYuLEic5tY8aMEQDEM888U+gY69evFwDEl19+WWj7smXLCm3PzMwUAQEBol27diI/P7/QvqqqFjpPdHR0uTK+9NJL4uqXlZ+fnxgzZkyRx17a53PRokUCgFizZk2R/bt27Sq6du3q/HnmzJkCgFi4cKFzm81mE+3btxf+/v4iKyur0GMKCwsTFy5ccO77888/CwDi119/LXKuf1uzZk2RTF27di2S3Wq1iqioKDFs2LASjyeEENHR0WLAgAElnuPf2efMmePcdvXvPTMzU5jNZjFlypRC933ssceEn5+fyMnJuW4WAOL77793brt06ZKoXr26aNGihXPbp59+KgCI/fv3O7fZbDYRHh5e7HNe3OO41r/Nmzc7H8v1Xrc2m01ERkaKJk2aFNrnt99+EwDEiy++6Nx2o++j1NRUodfrxZAhQwrt9/LLLwsAhR731c9heXL+97//LXSeFi1aiFatWl37F0vkAi5rWbj55puxefNmDB48GDt37sT06dPRp08f1KxZE7/88kuR/Xv16oV69eo5f27WrBkCAwNx9OhR5zYfHx/n/9vtdmRkZCAuLg7BwcH4559/ihzzgQcegE6nc/68cuVKZGZmYtSoUYW+weh0OrRr1w5r1qwp8TH9/vvvaNu2LTp16uTc5u/vj3HjxiElJQX79u0r3S+nGEOGDEHNmjWdP7dt2xbt2rXD77//XmTfhx56qNDPixYtQlBQEG6++eZCj6tVq1bw9/d3Pq6VK1ciOzsbzzzzTJF+1NJMuytLxtIo6/NZGr///juioqIwatQo5zaDwYDHHnsMOTk5WLduXaH9b7vtNoSEhDh/7ty5MwAUet2Vhb+/f6Fv7UajEW3bti338corKCgIt9xyC77+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SBcvXhT33HOPCA8PF/7+/qJPnz7iwIEDRfa7MnUyKSmp2Gxr1qwRffr0EUFBQcJsNot69eqJsWPHiq1bt173cSUnJ4vhw4eL4OBgYTabRdu2bcVvv/1WZL9rPaarXZk+9tZbb4kZM2aI2rVrC5PJJDp37ix27txZaN8xY8YIPz+/ax5r9uzZolWrVsLHx0cEBASIpk2biqefflqcOXOm0H6//PKL6NChg/Dx8RGBgYGibdu24uuvvy50nuKmTpYmY3FTJw8cOCC6dOkifHx8Ck0tK+3zKYQQn332mahbt67Q6XSFpqJdPXVSCCHS0tKcxzUajaJp06aFphle/ZiuBkC89NJLxf+SL7vW1MmEhIQi+179+7yWOnXqiMGDBxfadu7cOTFs2DDh6+srQkJCxPjx48WePXuuO3Xy36ZPny4AiKlTp143wxVXpnEuX75cNGvWTJhMJtGwYUOxaNGia94nISFByLJcaHptSa43dfLq18D1XrdCCPHtt9+KFi1aCJPJJEJDQ8Wdd95ZJE9FvI8cDod44YUXRFRUlPDx8RE9evQQ+/fvF2FhYeLBBx907net6a83krOk55rIVSQhyjmSiypESkoKYmNj8dZbb1XZ60i4Q0ZPEBoaigEDBpRqEa+ymDVrFiZOnIiUlJRiZx1VlBYtWiA0NBSrV6922TmqsszMTISEhOC1117D888/r3UcogpVdYcrE3mR5ORkXLx48YbGvRRHCIHPP/8cXbt2dWmhsHXrVuzYsQOjR4922Tmqkvz8/CLbrlyGXotLphO5WtWfK0jkwY4ePYrff/8dH3/8MYxGI26//fYKOW5ubi5++eUXrFmzBrt378bPP/9cIce92p49e7Bt2zbMmDED1atXx2233eaS81Q13377LebOnYv+/fvD398fGzZswNdff43evXujY8eOWscjqnAsFog09Oeff+LJJ59EQkICfv755yILiZXXuXPncMcddyA4OBjPPfccBg8eXCHHvdrixYvx3//+Fw0aNMDXX3/tNVdYbNasGfR6PaZPn46srCznoMfXXntN62hELsExC0RERFQijlkgIiKiErFYICIiohKxWCAiIqISsVggIiKiErFYICIiohKxWCAiIqISsVggIiKiErFYICIiohJxBUciIioVRVFgt9u1jkEVxGg0QpZL12bAYoGIiEokhEBqaioyMzO1jkIVSJZlxMbGwmg0XndfLvdMREQlOnv2LDIzMxEZGQlfX19IkqR1JLpBqqrizJkzMBgMqFOnznWfU7YsEBHRNSmK4iwUwsLCtI5DFSgiIgJnzpyBw+GAwWAocV8OcCQiomu6MkbB19dX4yRU0a50PyiKct19WSwQEdF1sevB85TlOWWxQERERCVisUBEREQlYrFARERlJsT1+7nd+XxUGGdDEBFRmUmSDnlbx0LJPuDyc+kCGsK39dwy32/s2LGYN28eAECv1yM0NBTNmjXDqFGjMHbs2FIvSOQKKSkpiI2Nxfbt29G8eXPNcpQWiwUiIioXJfsA1Es7tI5Ror59+2LOnDlQFAVpaWlYtmwZHn/8cSxevBi//PIL9PrK/xi02WyVfs4bxW4IIiLyWCaTCVFRUahZsyZatmyJ5557Dj///DOWLl2KuXPnAgAyMzNx//33IyIiAoGBgejRowd27tzpPMbOnTvRvXt3BAQEIDAwEK1atcLWrVudt2/YsAGdO3eGj48Pateujcceewy5ubnO22NiYvDqq69i9OjRCAwMxLhx4xAbGwsAaNGiBSRJQrdu3Srl91FeLBaIiMir9OjRA4mJifjhhx8AACNGjEB6ejqWLl2Kbdu2oWXLlujZsycuXLgAALjzzjtRq1YtJCUlYdu2bXjmmWecixglJyejb9++GDZsGHbt2oVvv/0WGzZswCOPPFLonG+//TYSExOxfft2vPDCC9iyZQsAYNWqVTh79qwzS1XFbggiIvI6DRs2xK5du7BhwwZs2bIF6enpMJlMAAo+2H/66ScsXrwY48aNw4kTJzB58mQ0bNgQAFC/fn3ncd544w3ceeedeOKJJ5y3vffee+jatSs+/vhjmM1mAAUFylNPPeW8n06nAwCEhYUhKiqqMh7yDWGxQEREXkcIAUmSsHPnTuTk5BRZyjo/Px/JyckAgCeffBL3338/FixYgF69emHEiBGoV68egIIuil27duHLL78sdGxVVXHs2DE0atQIANC6detKemSuwWKBiIi8zv79+xEbG4ucnBxUr14da9euLbJPcHAwAODll1/GHXfcgSVLlmDp0qV46aWX8M0332Do0KHIycnB+PHj8dhjjxW5f506dZz/7+fn56qHUilYLBARkVf5448/sHv3bkycOBG1atVCamoq9Ho9YmJirnmf+Ph4xMfHY+LE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RPrXRmRAHdQMikPdsKYIMIUAYMsBEVVNLBaoylFUBRLgXDzI6sjD2awUnMk6ermASEFadkqVXhzKIJsQ7l+zoCi4/C8qMAZhvtWdxYAqFAgBjjsgoiqPxQK5DUV1QJZ0kCQJAJBjvYQc60VcspxHtvUisq0XkXP5v9nWTOf/59tzKiyDWe8LX2MgfA0BBf81BsDXEAg/Y8HPYb7VERUQg0BzmDOnojogQeLKiUTktlgskNsr6MpQLi9ApCuyCJGiOpBnz0auLQuK6oAQKgQEhFChCvX//wvVeSxVqAAAX2MA/IxB8DUEwKz3LfYD/8oxBAR0kt5ZJBAReQoWC0RERFQirgNLREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJWKxQERERCVisUBEREQlYrFAREREJfo/8uhVVGnLHTQAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize theplot with the ecoregions data\n", - "ecoregions.geetools.plot_by_features(\n", - " type = \"donut\",\n", - " featureId = \"label\",\n", - " properties = ['07_ppt'],\n", - " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Share of precipitation in July by Ecoregion\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ee.FeatureCollection.geetools.plot_by_properties\n", - "\n", - "## Column chart\n", - "\n", - "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by columns, labeled by values of a selected property." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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ERER1TBWVlbo1KkTvvnmG+Tl5Sm8/dGjR9GyZUuMHTsWfn5+cHd3r7CX18/PD9OmTcOxY8fQuHFjrF27Vlrn4eGBiRMnIiEhAX369EFsbOxzjxUREYHevXvDx8cH9vb2uHbtmkJ5vby8cO7cOWk4CACpOFcGFsRERERENdCKFStQXFyMgIAArF+/Hmlpabh06RL+85//4OLFi9DW1n7utg0aNMCpU6ewZ88e/P333/j000+RnJwsrb969SqmTZuGpKQkXL9+HQkJCbh8+TK8vLzw6NEjREVFITExEdevX8fRo0eRnJwsN8b42WNt2rQJKSkpSE1NxaBBgxTu+R00aBBkMhlGjhyJCxcuYOfOnfjyyy8V2seL8Et1RERERDWQm5sbzp49i7lz52LatGn4559/oK+vD29vb0yaNEn6glpF3n//fZw9exb9+/eHTCbDwIEDMXbsWOzatQsAYGRkhIsXLyIuLg737t2Dg4MDIiMj8f7776O4uBj37t1DeHg4bt++DWtra/Tp00fuS3pPW7x4MYYPH46WLVvC2toaH330EXJychR6riYmJvj9998xevRo+Pn5wdvbGwsWLEDfvn0V2s/zyIQQQil7qsFycnJgbm6Ohw8fwszMTNVxqJIs5vd7aZvsqRuqIQkRqTu+X9DzPH78GFevXoWrq6vcF7ao5lPk2rKHmEiDsCggIiIqj2OIiYiIiEijsSAmIiIiIo3GgpiIiIiINBoLYiIiItJ4nGOg9lHkmrIgJiIiIo1VNlfvs3dNo5ovPz8fQPk74FWEs0wQERGRxtLR0YGRkRGysrKgq6sLLS32FdZ0Qgjk5+fjzp07sLCweOENSsqwICYiIiKNJZPJ4ODggKtXr+L69euqjkNKZGFhAXt7+0q1ZUFMREREGk1PTw8NGjTgsIlaRFdXt1I9w2VYEBMREZHG09LS4p3qNBgHyhARERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxERER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VKog3rZtG7p06QJdXV1s27bthW179uyplGBERERERNWhUgVxWFgYMjMzYWtri7CwsOe247hhIiIiIqppKlUQl5aWVvhvIiIiIqKaTuEbcxARERER1SYKF8Tjx4/H0qVLyy3/5ptvMGHCBGVkIiIiIiKqNgoXxBs3bkRQUFC55S1btsRvv/2mlFBERERERNVF4YL43r17MDc3L7fczMwMd+/eVUooIiIiIqLqovA8xO7u7ti9ezeioqLklu/atQv169dXWjAiIqp5LOb3e2mb7KkbqiEJEVHlKVwQR0dHIyoqCllZWejQoQMAYN++fVi0aBGWLFmi7HxERERERFVK4YJ4+PDhKCgowOeff445c+YAAFxcXLBy5UqEh4crPSARERERUVVSuCAGgDFjxmDMmDHIysqCoaEhTExMlJ2LiIiIiKhavNI8xMXFxfjjjz+wadMmCCEAALdu3UJubq5SwxERERERVTWFe4ivX7+O0NBQ3LhxAwUFBejUqRNMTU2xYMECFBQUYNWqVVWRk4iIiIioSijcQ/zBBx8gICAADx48gKGhobS8d+/e2Ldvn1LDERERERFVNYV7iA8fPoxjx45BT09PbrmLiwtu3ryptGBERERERNVB4R7i0tJSlJSUlFv+zz//wNTUVCmhiIiIiIiqi8IFcUhIiNx8wzKZDLm5uZg5cya6du2qzGxERERERFVO4SETX375JUJDQ+Ht7Y3Hjx9j0KBBuHz5MqytrfHLL79URUYiIiIioiqjcEHs5OSE1NRUrF+/HqmpqcjNzcWIESMwePBguS/ZERERERHVBAoNmSgqKoKbmxsuX76MwYMHY+HChVixYgXee++9VyqGDx06hB49esDR0REymQxbtmyRWy+EwIwZM+Dg4ABDQ0MEBwfj8uXLcm3u37+PwYMHw8zMDBYWFhgxYgTnQyYiIiKiSlOoINbV1cXjx4+VdvC8vDw0adIEy5cvr3D9woULsXTpUqxatQonTpyAsbExOnfuLJdh8ODB+Ouvv7B3715s374dhw4dwqhRo5SWkYiIiIhqN4WHTERGRmLBggX4/vvvoaPzSnd+lnTp0gVdunSpcJ0QAkuWLMEnn3yCXr16AQB++ukn2NnZYcuWLRgwYADS0tKwe/duJCcnIyAgAACwbNkydO3aFV9++SUcHR1fKx8RERER1X4KV7TJycnYt28fEhIS4OPjA2NjY7n1mzZtUkqwq1evIjMzE8HBwdIyc3NztGjRAklJSRgwYACSkpJgYWEhFcMAEBwcDC0tLZw4cQK9e/eucN8FBQUoKCiQHufk5AB4MiSkqKhIKfmrgjpnU1fqes7UNReg3tlIMep6LZlLceqcTdV0dXVVHYFqAYULYgsLC/Tt27cqssjJzMwEANjZ2cktt7Ozk9ZlZmbC1tZWbr2Ojg4sLS2lNhWZN28eYmJiyi1PSEiAkZHR60avMjt37lR1hBpHXc+ZuuYC1DsbKUZdryVzKU6ds6la2afIRK9D4YI4Nja2KnJUq2nTpiE6Olp6nJOTAycnJ4SEhMDMzEw1odLiX9qE8zw/Q13PmbrmAtQ7GylGXa8lcylOnbMRaYhKF8SlpaX44osvsG3bNhQWFqJjx46YOXNmlU21Zm9vDwC4ffs2HBwcpOW3b99G06ZNpTZ37tyR2664uBj379+Xtq+Ivr4+9PX1yy3X1dVV649e1DmbulLXc6auuQD1zkaKUddryVyKU+dsRLVBpWeZ+Pzzz/Hxxx/DxMQEb7zxBr7++mtERkZWWTBXV1fY29tj37590rKcnBycOHECgYGBAIDAwEBkZ2fj9OnTUpv9+/ejtLQULVq0qLJsRERERFR7VLqH+KeffsKKFSvw/vvvAwD++OMPdOvWDd9//z20tBS+AzQAIDc3F1euXJEeX716FSkpKbC0tES9evUwYcIEfPbZZ2jQoAFcXV3x6aefwtHREWFhYQAALy8vhIaGYuTIkVi1ahWKiooQFRWFAQMGcIYJIiIiIqqUShfEN27ckBvDFBwcDJlMhlu3bqFu3bqvdPBTp06hffv20uOycb1Dhw7FmjVrMGXKFOTl5WHUqFHIzs5Gq1atsHv3bhgYGEjbxMfHIyoqCh07doSWlhb69u2LpUuXvlIeIiIiItI8lS6Ii4uL5QpR4MmYpteZCqZdu3YQQjx3vUwmw+zZszF79uzntrG0tMTatWtfOQMRERERabZKF8RCCERERMh9Ge3x48cYPXq03FzEypqHmIiIiIioOlS6IB46dGi5Ze+++65SwxARERERVbdKF8S1Yf5hIiIiIqJnvdr0EEREREREtQQLYiIiIiLSaCyIiYiIiEijsSAmIiIiIo3GgpiIiIiINBoLYiIiIiLSaCyIiYiIiEijsSAmIiIiIo1W6RtzEBFRxT7a3vWlbRZ031kNSYiI6FWwh5iIiIiINBp7iImIqNqxV52I1Al7iImIiIhIo7EgJiIiIiKNxoKYiIiIiDQaC2IiIiIi0mj8Uh0RVZmHWwxe2sY87HE1JCEiIno+9hATERERkUZjD7EGY+8dEREREXuIiYiIiEjDsSAmIiIiIo3GgpiIiIiINBrHEBNRjcHb/RIRUVVgDzERERERaTQWxERERESk0VgQExEREZFG4xhiIqLnsJjf76VtsqduqIYkRERUldhDTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajQUxEREREWk0FsREREREpNF0VB2Aao+Ptnd9aZsF3XdWQxIiIiKiymMPMRERERFpNBbERERERKTROGSihuGwBCIiIiLlYg8xEREREWk0FsREREREpNFYEBMRERGRRmNBTEREREQajV+qIyIionIs5vd7aZvsqRuqIQlR1VPrHuJZs2ZBJpPJ/TRs2FBa//jxY0RGRsLKygomJibo27cvbt++rcLERERERFTTqHVBDACNGjVCRkaG9HPkyBFp3cSJE/H777/j119/xcGDB3Hr1i306dNHhWmJiIiIqKZR+yETOjo6sLe3L7f84cOH+OGHH7B27Vp06NABABAbGwsvLy8cP34cb731VnVHJSIiIqIaSO0L4suXL8PR0REGBgYIDAzEvHnzUK9ePZw+fRpFRUUIDg6W2jZs2BD16tVDUlLSCwvigoICFBQUSI9zcnIAAEVFRSgqKqq6J/OaKptNmc9B2eejus+vul5Pdc0F1PxrpK75VXHN1fV1pq7nTF3PF6C+2dQhl66urqojUC2g1gVxixYtsGbNGnh6eiIjIwMxMTFo3bo1zp8/j8zMTOjp6cHCwkJuGzs7O2RmZr5wv/PmzUNMTEy55QkJCTAyMlLmU1CqnTt3AtqVbFcJ7Sp7zMpSYjZlqe7jVZa65gKUm62dso+nrq8xNcylqmNWhrqeM3U9X4D6ZlOHXL169VJ1BKoF1Log7tKli/RvX19ftGjRAs7OztiwYQMMDQ1feb/Tpk1DdHS09DgnJwdOTk4ICQmBmZnZa2V+ZWnxL23StWtX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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "\n", - "# initialize theplot with the ecoregions data\n", - "ax = ecoregions.geetools.plot_by_properties(\n", - " type = \"bar\",\n", - " properties = ['01_ppt', '02_ppt', '03_ppt', '04_ppt', '05_ppt', '06_ppt', '07_ppt', '08_ppt', '09_ppt', '10_ppt', '11_ppt', '12_ppt'],\n", - " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", - " featureId = \"label\",\n", - " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", - "ax.set_xlabel(\"Month\")\n", - "ax.set_ylabel(\"Precipitation (mm)\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Line chart\n", - "\n", - "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by columns, labeled by values of a selected property." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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v7N3794GdXf1E5/U1FS0Wm2TczTeuZ6bm0thYSEfffQRH330UYviOp9bbrmFRYsWsW/fPr788ktuuummZhOy1NRUAHr06NHkvri4OFasWNFkU1njRM/Pzw8w/VHg7e3dovgu5hy+vr5MmzaNL7/8khdffBEwJT1dunSx/DFzIffeey/XX389Wq0WX19fS114Y41frxMnTgCc8zrmmM0JQp8+fVoUT2MxMTFNXqfY2FjAVOvbuHNIS3z66ae8/vrrHD16lJqaGsvt5/q+vhDz93Tj7+Hg4GB8fX0t31NmjV9rML3eBQUFLbpe9+7dm9wWGxvLt99+a/n86quvJiQkhMWLF3PVVVdhNBr56quvmDFjBl5eXi26ztChQ8+7qS4pKYnQ0NAGfzg21trnprnX4MSJE+zfv/+CP59SU1MJCQnB3d29wf0t6YrR3q+hEKJ1JCEWzVqzZg1ZWVl8/fXXfP31103uX7x4MePHjwfgpptu4sMPP2TZsmXMnDmTb7/9lp49e9K/f3/L8Uajkb59+/LGG280e72wsLAGnze363vjxo1Mnz6d0aNH89577xESEoKzszMff/xxkw1tLWHeLHPbbbdxxx13NHtMv379Wny+YcOGER0dzcMPP0xycjK33HJLq2M6l3N1R1AUpc3PMXv2bL777ju2bNlC3759+eWXX3jggQfQalv2BlP37t3P2ae5vsavufn1+fzzz5tNSm11B/8XX3zBnDlzmDlzJn/5y18IDAxEp9Px8ssvk5SUdEnnbumgB2t8v7TkGrfccgv//ve/ee+999i8eTOZmZktfufA2lr63DT3s8VoNHL11Vfz+OOPN/sY8x9I1mBLr6EQ4izb/I0iVLd48WICAwN59913m9y3ZMkSfvzxRz744APc3NwYPXo0ISEhfPPNN1x++eWsWbOmwe5+gOjoaPbt28dVV1110dObfvjhB1xdXVmxYkWDFcaPP/64wXEREREYjUaSk5MbrHQlJiY2OC4gIAAvLy8MBkOLEraWuPnmm/n73/9OXFzcOXvsRkREAHDs2LEm9x09epTOnTtfVMuxtpqKNXHiRAICAli8eDHDhg2jvLyc22+/vU2uVV90dDQAgYGB5319unXrBtCgC0JrJCYmoihKg+fv+PHjAJbOEc051/P9/fff061bN5YsWdLgmMZv+7fm9TJ/T584cYK4uDjL7Tk5ORQWFlq+p6zFvDpf3/Hjx5s8H7Nnz+b111/n119/ZdmyZQQEBJyzq8rFiI6OZsWKFeTn559zldgaz010dDSlpaUX/DkQERHB2rVrKS8vb7BK3PhnS1vFKYRoO1JDLJqoqKhgyZIlTJ06leuuu67Jx/z58ykpKeGXX34BTDV01113Hb/++iuff/45tbW1DcolwFSLmpGRwb///e9mr1dWVnbBuHQ6HRqNxlK/DKa3tBtPZzP/Qn7vvfca3P722283Od+1117LDz/80GwylZube8GYGrv77rt57rnneP311895TEhICAMGDODTTz+lsLDQcvvBgwdZuXIlkydPbvV1ATw8PBqcz1qcnJy4+eab+fbbb/nkk0/o27dvq1bOL9aECRPw9vbmpZdealB2YGZ+fQICAhg9ejT/+9//SEtLa3BMS1bTMjMz+fHHHy2fFxcX89lnnzFgwIDzlkt4eHhQVFTU5Hbzyl79a2/bto2EhIQGx5kTqpa8ZubvicaT8czvuEyZMuWC52iNn376qUHbtO3bt7Nt2zYmTZrU4Lh+/frRr18//vOf//DDDz9w0003WXXl/tprr0VRFMsAk/rMz681npsbbriBhIQEVqxY0eS+wsJCamtrAdP3ZE1NTYOfY0ajsdmFg8ba+zUUQrSOrBCLJn755RdKSkqYPn16s/cPHz7csmJoTnxvvPFG3n77bZ577jn69u3bYAUETFPCvv32W+677z7Wrl3LyJEjMRgMHD16lG+//dbSF/R8pkyZwhtvvMHEiRO55ZZbOH36NO+++y4xMTHs37/fctygQYO49tpreeutt8jLy2P48OGsX7/esupXf2XuH//4B2vXrmXYsGHcc8899OrVi/z8fHbv3s3q1avJz89v1XMXERHRpM9xc/75z38yadIkRowYwV133UVFRQVvv/02Pj4+LXp8cwYNGsTq1at54403CA0NJSoqymrjtmfPns2iRYtYu3Ytr7zyilXOeSHe3t68//773H777QwcOJCbbrqJgIAA0tLS+O233xg5ciTvvPMOAIsWLeLyyy9n4MCB3HvvvURFRZGSksJvv/12wTHRsbGx3HXXXezYsYOgoCD+97//kZOT0+Sdh8YGDRrEN998w4IFCxgyZAienp5MmzaNqVOnsmTJEmbNmsWUKVNITk7mgw8+oFevXpSWlloe7+bmRq9e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+K+88kr69+/PkiVLALj++us5ffo0y5YtY9euXQwcOJCrrrqK/Px8AG699Va6du3Kjh072LVrF0888QTOzs4AJCUlMXHiRK699lr279/PN998w6ZNm5g/f36Da7722mv079+fPXv28Mwzz7B9+3YAVq9eTVZWliUWWyaDOYRNy68oobS6EoDvDm3iL5ddK61xhBBCtB1DOcVLO6lyae+peeDkccnn6dmzJ/v372fTpk1s376d06dPo9frAVPy+tNPP/H9999z7733kpaWxl/+8hd69uwJQPfu3S3nefnll7n11lt5+OGHLfctWrSIMWPG8P777+Pq6gqYkvBHH33U8jjzEIxOnToRHBx8yV9Pe5AVYmHTUotOW/7/RH4m+3KSVYxGCCGEsH2KoqDRaNi3bx+lpaV06tQJT09Py0dycjJJSUkALFiwgLvvvptx48bxj3/8w3I7mMopPvnkkwaPnTBhAkajkeTks7+PBw8e3O5fo7XJCrGwaSmFpxt8/v3hTQwI7qZSNEIIIRyezt20UqvSta3hyJEjREVFUVpaSkhICOvWrWtyjK+vLwDPP/88t9xyC7/99hvLli3jueee4+uvv2bWrFmUlpbypz/9iQcffLDJ48PDwy3/7+Fx6avaapOEWNi01LqEOMDdh9zyIn44vJmFV9yGTitvbgghhLA+jUZjlbIFtaxZs4YDBw7wyCOP0LVrV7Kzs3FyciIyMvKcj4mNjSU2NpZHHnmEm2++mY8//phZs2YxcOBADh8+TExMTKtiMI/BNo/FtgeSVQibZi6ZuLXfFXjr3ckqLWDLqSMqRyWEEEKor6qqiuzsbDIyMti9ezcvvfQSM2bMYOrUqcyePZtx48YxYsQIZs6cycqVK0lJSWHLli089dRT7Ny5k4qKCubPn8+6detITU1l8+bN7Nixg7i4OAD++te/smXLFubPn8/evXs5ceIEP//8c5NNdY0FBgbi5ubG8uXLycnJoaioqD2ejksiCbGwaSmFOQDEdurCjB7DAfju8EY1QxJCCCFswvLlywkJCSEyMpKJEyeydu1aFi1axM8//4xOp0Oj0fD7778zevRo7rzzTmJjY7nppptITU0lKCgInU5HXl4es2fPJjY2lhtuuIFJkyaxcOFCAPr168f69es5fvw4o0aNIj4+nmeffZbQ0NDzxuXk5MSiRYv48MMPCQ0N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xY3iqgoO56bRNyiyjaITanDW6Xlx4hLVrt1SMTExaDQaS0mBWbdu3QBwc2s4cbFxWcXXX3/NY489xuuvv86IESPw8vLin//8J9u2bbMc8/HHH/Pggw+yfPlyvvnmG55++mlWrVrF8OHDef7557nlllv47bffWLZsGc899xxff/01s2Y1nRD72GOPsWrVKl577TViYmJwc3Pjuuuuo7q6uuHX36jkQqPRYGynPzplhVjYBEVRSCu69Cl1jWk0Gq6z9CTu2EM6DEYjtUaD2mEIYVNaMqGuMSetznK8lE04Ho1Gg4uTqyof9Wt+L6RTp05cffXVvPPOO5SVlbX669y8eTOXXXYZDzzwAPHx8cTExDS7yhsfH8+TTz7Jli1b6NOnD19++aXlvtjYWB555BFWrlzJNddcw8cff3zOa82ZM4dZs2bRt29fgoODSUlJaVW8cXFx7N+/31IOArB169ZWneN8JCEWNiG/ooSS6goAwnw6W/Xc5lXhP5L3kVdebNVz2wujYuSG716mx9v3dtjnQIjGFEU522HiPBPqmiMb64QteO+996itrWXw4MF88803HDlyhGPHjvHFF19w9OhRdDrdOR/bvXt3du7cyYoVKzh+/DjPPPMMO3bssNyfnJzMk08+SUJCAqmpqaxcuZITJ04QFxdHRUUF8+fPZ926daSmprJ582Z27NjRoMa48bWWLFnC3r172bdvH7fcckurV35vueUWNBoN99xzD4cPH+b333/ntddea9U5zkcSYmETzBvqQjz9cHVyseq5Yzt1oX9QFLVGAz8fs95fk/bki/3rTH8QVJSwLUMGlQgBpn0LeRUluOic6BMY0arHDq8b0CEjnIWaoqOj2bNnD+PGjePJJ5+kf//+DB48mLfffpvHHnuMF1988ZyP/dOf/sQ111zDjTfeyLBhw8jLy7NsaANwd3fn6NGjXHvttcTGxnLvvfcyb948/vSnP6HT6cjLy2P27NnExsZyww03MGnSpAab9Op744038PPz47LLLmPatGlMmDCBgQNbt9Hd09OTX3/9lQMHDhAfH89TTz1l2TBoDRqlNT0+HFRxcTE+Pj4UFRXh7e2tdjgd0pIjW5j781uM6NqTZbe9YPXzv73tV55Z+3mbnd+WFVSUMuijh8ivKAHghbG38eCw6SpHJYT6vj20kXt/fZshod1ZNfv/WvXY0upK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hVdeeYXevXuzadMm/vjjjzZp6nCh+NRqNd9//z1HjhyhV69evPrqq7zwwgv1xhg6dCgff/wxb775Jr1792b58uU89NBD6HQ6u8X5+uuvM3z4cKZNm8a4ceMYNmwY/fr1s+1fuHAht956Kw8//DDdunXj6quvZufOnYSFhQHWpHnlypXs37+fgQMHMnjwYH7//fdWr+X8n//8h3//+9+8/PLLxMXFMWnSJP76669z3sxfeeUVHnjgAfr160deXh5Lly5tkzqvTX1+OpMnnniCkSNHMnXqVK644gquvvrqVilh1VHiupC7776ba6+9lhtvvJFBgwZRVFTEvffe6+iwbJoan0KhYObMmZjNZm699dY2iU2SJH7//Xc6derEiBEjGDduHFFRUfzwww/1jvPw8GDatGns37+fGTNmtFo8r7zyCtdddx233HILffv2JSUlhRUrVtj+8F2zZg2VlZWMHDmSfv36sWDBAlvSe+edd9KtWzf69++Pv79/vZlme/D09GTDhg1MmTKFrl278tRTT/HGG28wefJk7rjjDj777DMWLlxIz549GTlyJIsWLWrwddIR75OCcDZJPnuBnNBiGRkZREZGsnfvXvr06ePocOzmzjvv5MiRI2zcuNHRoQgNmD59Okqlkm+++cbRoTSJs8brrHFdqmbPnk1hYaHdazsLjtVR3yeF9kvMEAuN+u9//8v+/ftJSUnhvffe48svv6y3JEBwDiaTicOHD7N161YSEhIcHc4FOWu8zhrXpaqsrIxNmzbx3XffMXfuXEeHIwhCBycSYqFRO3bsYPz48fTs2ZOPP/6Yd999lzvuuMPRYQlnOXToEP379ychIYF77rnH0eFckLPG66xxXaquuuoqJkyYwD333MP48eMdHY4gCB2cWDIhCIIgCIIgXNLEDLEgCIIgCIJwSRMJsSAIgiAIgnBJEwmxIAiCIAiCcEkTCbEgCIIgCIJwSRMJsSAIQgMkSWLJkiWODkMQBEFoAyIhFgTBqcycORNJkhosfXbfffchSRIzZ8602/meffZZ0RhAEAThEicSYkEQnE5oaCiLFy+mpqbGtq22tpbvvvvO1rpbEARBEOxFJMSCIDidvn37Ehoayq+//mrb9uuvvxIWFsZll11m26bX65k3bx4BAQHodDqGDRvGzp07bfvXrVuHJEmsXr2a/v374+rqypAhQzh69CgAixYt4rnnnmP//v1IkoQkSSxatMj2+JMnT3LNNdfg6upKbGysaB8sCILQQYmEWBAEpzRr1iwWLlxo+/yLL77g9ttvr3fMY489xi+//MKXX37Jnj17iImJYeLEiRQXF9c77sknn+SNN95g165dqFQqZs2aBcCNN97Iww8/TEJCArm5ueTm5nLjjTfaHvfcc89xww03cODAAaZMmcKMGTPOGVsQBEFo/0RCLAiCU7r55pvZtGkTmZmZZGZmsnnzZm6++Wbb/qqqKj766CNef/11Jk+eTHx8PAsWLMDFxYXPP/+83lgvvvgiI0eOJD4+nscff5wtW7ZQW1uLi4sL7u7uqFQqgoKCCAoKwsXFxfa4mTNnMn36dGJiYnjppZeorKxkx44dbfY9EARBENqGytEBCIIgNMTf358rrriCRYsWIcsyV1xxBX5+frb9qampGI1Ghg4datumVqsZOHAgSUlJ9cbq1auX7ePg4GAACgoKLrge+czHubm54enpSUFBQYu+LkEQBMH5iIRYEASnNWvWLO6//34APvjgg2aPo1arbR9LkgSAxWK5qMfVPbYpjxMEQRDaF7FkQhAEpzVp0iQMBgNGo5GJEyfW2xcdHY1Go2Hz5s22bUajkZ07dxIfH9/kc2g0Gsxms91iFgRBENofMUMsCILTUiqVtuUPSqWy3j43NzfmzJnDo48+io+PD2FhYbz22mtUV1cze/bsJp8jIiKC9PR09u3bR5cuXfDw8ECr1dr16xAEQRCcm0iIBUFwap6eno3ue+WVV7BYLNxyyy1UVFTQv39/VqxYQadOnZo8/nXXXcevv/7K6NGjKS0tZeHChXZt/CEIgiA4P0mWZdnRQQiCIAiCIAiCo4g1xIIgCIIgCMIlTSTEgiAIgiAIwiVNJMSCIAiCIAjCJU0kxIIgCIIgCMIlTSTEgiAIgiAIwiVNJMSCIAiCIAjCJU0kxIIgCIIgCMIlTSTEgiAIgiAIwiVNJMSCIAiCIAjCJU0kxIIgCIIgCMIlTSTEgiAIgiAIwiVNJMSCIAiCIAjCJe3/Acwz41iRceE0AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize theplot with the ecoregions data\n", - "ax = ecoregions.geetools.plot_by_properties(\n", - " type = \"plot\",\n", - " properties = [\"01_ppt\", \"02_ppt\", \"03_ppt\", \"04_ppt\", \"05_ppt\", \"06_ppt\", \"07_ppt\", \"08_ppt\", \"09_ppt\", \"10_ppt\", \"11_ppt\", \"12_ppt\"],\n", - " featureId = \"label\",\n", - " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", - " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", - "ax.set_xlabel(\"Month\")\n", - "ax.set_ylabel(\"Precipitation (mm)\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Area chart \n", - "\n", - "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by lines and shaded areas, labeled by values of a selected property." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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uq2FjoyMxNKlS/H1119DqVRi7NixSExMxLZt2zB37lztwld9CQgIwKhRo/DUU0+hubkZn376KZydnbstKViyZIm237iu5RKHDh1Cenp6l+0jR46En58fxo8fj0ceeQQbNmxAVlYWpk6dCo1Gg9OnT2P8+PFYtWqVXl6bl156Cfv378fMmTOxbNkyREdHo76+HpcvX8bPP/+M3NxcuLi4YO7cuRg6dCheeOEFZGdnIzg4GPv379f+nLjTVX9jv4eEEB2x1N2CmLBZs2Yx1tbWd+wxu2zZMkYgEGjblWk0GsbT05MBwLz33nvdPqalpYVZt24dExYWxgiFQsbR0ZGJjo5m1qxZw1RXV2v3A8CsXLmy22P897//Zfr3788IhUImODiY2bJlS7f9Puvr65mVK1cyTk5OjL29PTN37lwmIyODAaDtcdtOoVAwK1euZDw9PRmBQMC4uroyEydOZL7++uu7vlbtbdfupLu2awzDML///jsTExPD2NjYMCKRiJk1axZz7dq1Dvu0P7eysrJuj3lrC7H09HRmzJgxjI2NDQNA2xZNl2N0brt2q7CwMIbL5XZox3Unt+tD3NntXp92J06cYO677z5GLBYz1tbWjL+/P7Ns2TImOTm5w35Xrlxh5s2bx0gkEsba2poJCgpi3njjjbs+3xkzZjBHjhxhIiIitN9XP/30U5cY0KntWl1dHbNo0SJGIpEwALQt2DQaDbN27VrG29ubEQqFTFRUFHPgwAFm6dKlXdq0xcXFMdHR0YyVlVWHFmzdfU+3trYya9asYXx9fRmBQMB4enoyr732GtPU1NRhv9t9T44dO5YZO3Zst69xu1vfs/Xr1zOenp7a/tbtPZI7Ky4uZng8HhMYGHjHY9/qTm3X0Kl9mUqlYv79738zwcHBjJWVFSOVSplp06Yx58+f19trwzBtbf5ee+01JiAggLGysmJcXFyYkSNHMh999BHT0tKi3a+srIxZtGgR4+DgwIjFYmbZsmXM2bNnGQDMzp07tfux9R4SQnqHwzBUoU/6hpSUFERFReH777/H4sWL2Q7H7ERFRcHJyQl//PEH26HojY+PDwYMGIADBw6wHYrZKi8vh5ubG95880288cYbbIfDin379mHevHk4c+YMYmJi2A6HENILVENMLFJjY2OXbZ9++im4XC7GjBnDQkTmLTk5GSkpKViyZAnb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6o7z2z9WX7p0KdOmTcNgMLBmzZpBia+rj/R37NiBJEkUFhZ2bHvxxRdJS0vDbDZz/fXX85vf/Ibo6OiQxdjS0sKdd96J1WolKSmJ5557rtN+t9vNww8/TEpKChaLhZkzZ/L55593Ombt2rVcdNFFmM1mYmJiuPzyy6mrqwtZjHfffTcPPvggRUVFSJJERkYGgUCAJ598kszMTEwmE5MmTeLtt98+69y1a9cyceJEjEYjs2bNYs+ePSGL61yxtn/Uf77HH079jr777rtcfPHFmM1mJk2axPr16wc0xnPFm5GRwW9/+9tO+ydPnszjjz8+aPH0NS5JknjppZe4/vrrMZvNjBkzhg8++CCkMV100UU8+OCDfPe73yUmJoaEhARefPFFWlpauOeee4iKiiI7O5ulS5cC4Pf7ue+++zp+R3Nycvjd737X5ff5q1/9iuTkZHJyciImvi+++AKdTkd5eXmn63z3u99l/vz5fY7z9Hi//e1v84Mf/IDY2FgSExM7PaZFRUVce+21WK1WbDYbN998MxUVFQAcOnQISZI4cOBApzGff/55srKy+h3bmdxuN9/+9reJj4/HaDQyb948Nm/e3LF/7969XH311dhsNqKiopg/fz4FBQU8/vjjvPrqq7z//vtIkoQkSWc9f4bC22+/zYQJEzCZTDgcDhYtWkRLSwsAL730Enl5eRiNRnJzc/njH//YcV5PXicFYTCJhLiPWlpaeOihh9iyZQsrV65ElmWuv/56AoFAxzGPPPII3//+99m+fTuzZ8/mmmuuoaamptM4P/zhD3nqqafYv38/EydOHNT4zmft2rXcf//9fOc732HHjh1ceuml/OpXvwpZfBD8+axevZr333+f5cuX8/nnn7Nt27aO/d/61rdYv349S5YsYdeuXdx0001cccUVHD58GAgm8QsXLiQ/P5/169ezZs0arrnmGvx+f8hi/N3vfsfPf/5zUlNTKSsrY/PmzTz55JP87W9/409/+hN79+7le9/7HrfffvtZT+SPPPIIzz33HJs3byYuLo5rrrkGr9cbstjOp6eP/2OPPcbDDz/Mjh07GDt2LIsXL8bn8w1KjMPJE088wc0338yuXbu48sorue2226itrQ3pNV599VWcTiebNm3iwQcf5IEHHuCmm25izpw5bNu2jcsuu4w77riD1tZWAoEAqampvPXWW+zbt4+f/vSn/OhHP+LNN9/sNObKlSs5ePAgK1as4F//+lfExHfhhRcyevRo/v73v3eM7/V6ee2117j33nv7Fefp8VosFjZu3MgzzzzDz3/+c1asWEEgEODaa6+ltraW1atXs2LFCo4ePcott9wCwNixY5k+fTqvvfZap/Fee+01/v3f/z0ksZ3uBz/4Ae+88w6vvvoq27ZtIzs7m8svv5za2lpKSkq48MILMRgMfPbZZ2zdupV7770Xn8/Hww8/zM0338wVV1xBWVkZZWVlIf+Uq6ysjMWLF3Pvvfeyf/9+Pv/8c2644QY0TeO1117jpz/9Kb/61a/Yv38/v/71r/nJT37Cq6++2mmMnrxOCsKg0ISQqKqq0gBt9+7d2rFjxzRAe+qppzr2e71eLTU1VXv66ac1TdO0VatWaYD23nvvDXp87deuq6vr2L99+3YN0I4dO6Zpmqbdcsst2lVXXdVpjNtuu02z2+0hiaepqUnT6/Xam2++2bGtpqZGM5lM2ne+8x3t+PHjmqIoWklJSafzFi5cqD366KOapmna4sWLtblz54YknvN5/vnntVGjRmmapmkul0szm83aunXrOh1z3333aYsXL9Y07dRju2TJko797d/bG2+8MWBx3nXXXdq1117b5b7TH39N0zp+R1966aWOY/bu3asB2v79+wcsxtOdHu+oUaO0559/vtP+SZMmaT/72c86vga0f/7znxEZ149//OOOr5ubmzVAW7p0achiWrBggTZv3ryOr30+n2axWLQ77rijY1tZWZkGaOvXr+9yjG9+85vajTfe2PH1XXfdpSUkJGhutzsi43v66ae1vLy8jq/feecdzWq1as3NzSGPV9M07YILLtD+67/+S1u+fLmmKIpWVFTUsa/9/8amTZs0TQs+J2RlZXXsP3jw4ID832lubtZ0Op322muvdWzzeDxacnKy9swzz2iPPvqolpmZqXk8ni7PP99zQihs3bpVA7TCwsKz9mVlZWmvv/56p22/+MUvtNmzZ2uapvXodVIQBpOoEPfR4cOHWbx4MaNHj8Zms5GRkQEEP2prN3v27I5/q6rK9OnT2b9/f6dxpk+fHrb4zufgwYPMmDGj07Yzv+6PgoICPB4PM2fO7NgWGxvb8bHt7t278fv9jB07FqvV2vFn9erVHR/9t1eIB9ORI0dobW3l0ksv7RTX3/72t05T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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# initialize the plot with the ecoregions data\n", - "ax = ecoregions.geetools.plot_by_properties(\n", - " type = \"fill_between\",\n", - " properties = [\"01_ppt\", \"02_ppt\", \"03_ppt\", \"04_ppt\", \"05_ppt\", \"06_ppt\", \"07_ppt\", \"08_ppt\", \"09_ppt\", \"10_ppt\", \"11_ppt\", \"12_ppt\"],\n", - " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", - " featureId = \"label\",\n", - " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", - " ax = ax\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", - "ax.set_xlabel(\"Month\")\n", - "ax.set_ylabel(\"Precipitation (mm)\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ee.FeatureCollection.geetools.plot_hist\n", - "\n", - "The x-axis is defined by value bins for the range of values of a selected property; the y-axis is the number of elements in the given bin." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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6FDNmDFD4eHhGjZsmM6ePat58+apXr16SktLy9c2Bg4caP1yxcmTJxdluVY1a9bUW2+9pejoaJ04cUK9evWSp6enkpKS9OWXX2r48OEaO3asypUrp7lz56pHjx5q3LixhgwZoipVquinn37S4cOHtWbNmnvup379+goPD9eIESPk4uKiDz74QJLu+y/Dpk2bau7cuXrrrbdUq1Yt+fr6qkOHDnrmmWc0adIkDRkyRE899ZQOHjyomJgYmxGE7OPz8fHRvHnz5OnpKQ8PDzVv3jzXeR49evRQ+/bt9frrr+vEiRNq1KiR1q5dq6+++kqjRo2ymUBdGPbu3aulS5cqKytLly5d0u7du/XFF1/IYrFoyZIlatiwYZ59N2zYoMjISP3pT39SSEiIbt26pSVLlsjBwUF9+/a1tmvatKnWrVunGTNmWP8ibd68eYHqzc9n2K9fP/3lL39R7969NWLECP3++++aO3euQkJCckx2z29tlStXVnR0tCZOnKguXbroD3/4gxITE/XBBx/oiSeesOvWckEU93Xh7e2tkSNH3ve22ZIlSyTJZoRIuh2Ili9fbm2XH40bN9aLL76oWbNm6ejRo3r66acl3f6qje+++04vvviizaP777zzjuLj49WnTx/rdbp371598sknqlixokaNGiXp9nepGf//1xbkplu3bnJ0dFRMTEyBr0vkQ0k82gbzWLhwoSHJ2Lt3r3XZ0qVLjccee8xwdnY2GjdubKxZsyZfj91nS09PNypUqGB4e3vn++cvsh/Hvt/j19mPPZ87dy7X9V988YXRqlUrw8PDw/Dw8DBq165tREREGImJiTbttm3bZjz99NOGp6en4eHhYTRs2NDmMfO8HtmOiIgwli5dagQHBxsuLi5GkyZNrI+QZ8vtsfvU1FSje/fuhqenpyHJ+gj+jRs3jDFjxhhVqlQx3NzcjJYtWxpxcXG5fv3BV199ZdStW9dwdHS0eQQ/t8/mypUrxujRo42AgADDycnJCA4ONqZNm5bjZySyj+lugYGB9/2pjOzHqbNfjo6ORsWKFY3mzZsb0dHRxsmTJ3P0ufux+59//tkYOnSoUbNmTcPV1dWoWLGi0b59e2PdunU2/X766SejTZs21keks2u71/XwIJ+hYRjG2rVrjfr16xvOzs5GaGiosXTp0ly3mVdtuV0HhnH7MfvatWsbTk5Ohp+fn/Hyyy/n+AqI3B6bN4y8vw7gbnn1f9Drwt79Xbx40fD29s7z6xnmz59vSMr1Z0b27t1rvbbOnDmT71oyMzONWbNmGY0aNTJcXV0NV1dXo1GjRsbs2bNzfMXF9u3bjYiICKN+/fqGt7e34eTkZFSvXt0YPHiwcfz4cWu7Bg0aGNWrV7/nftu1a2f4+voaGRkZ+a4V9rEYRjHNoIMpzZ49WyNHjtSxY8cK7V+It27dUkBAgHr06JFjbkxZZrFYFBERketwPACgaDGHCEVq9+7d8vDwKNQJlatWrdK5c+c0cODAQtsmAMDcmEOEIvHFF19o06ZNiomJ0YsvvlgoP4K5c+dOHThwQJMnT1aTJk3Utm3bQqgUAAACEYrI2LFjdeXKFQ0bNkwzZ84slG3OnTtXS5cuVePGja0/PAoAQGFgDhEAADA95hABAADTIxABAADTIxDlg2EYSktLK7bf+AEAAMWLQJQPV65ckbe3t65cuVLSpQAAgCJAIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKbnWNIFoGyqHvlhgfolvz+8kCsBAODBMUIEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMz7GkC4D5VI/8sED9kt8fXsiVAABwGyNEAADA9BghQpnC6BIAoCgwQgQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEzPsaQLQMmpHvlhgfolvz+8kCsBAKBkMUIEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMr0QD0ZQpU/TEE0/I09NTvr6+6tWrlxITE23a3LhxQxEREXrkkUdUvnx59e3bV2fOnLFpk5ycrO7du8vd3V2+vr4aN26cbt26ZdNm06ZNevzxx+Xi4qJatWpp8eLFRX14AACgjCjRQLR582ZFRERox44dio2NVUZGhjp37qxr165Z24wePVr/+c9/tGLFCm3evFmnT59Wnz59rOszMzPVvXt33bx5U99//70+/vhjLV68WG+++aa1TVJSkrp376727dsrISFBo0aN0osvvqg1a9YU6/ECAIDSqUS/qXr16tU27xcvXixfX1/Fx8erTZs2unz5shYsWKBly5apQ4cOkqRFixapTp062rFjh1q0aKG1a9fqhx9+0Lp16+Tn56fGjRtr8uTJ+stf/qIJEybI2dlZ8+bNU1BQkKZPny5JqlOnjrZt26aZM2cqPDy82I8bAACULqXqpzsuX74sSapYsaIkKT4+XhkZGerUqZO1Te3atVW9enXFxcWpRYsWiouLU4MGDeTn52dtEx4erpdfflmHDx9WkyZNFBcXZ7ON7DajRo3KtY709HSlp6db36elpUmSMjIylJGRUSjHWpY9yDkoi30BAGWXk5NTvtqVmkCUlZWlUaNGqWXLlqpfv74kKTU1Vc7OzvLx8bFp6+fnp9TUVGubO8NQ9vrsdfdqk5aWpuvXr8vNzc1m3ZQpUzRx4sQcNa5du1bu7u4FP8iHxHfffWeqvgCAsqtnz575aldqAlFERIQOHTqkbdu2lXQpio6OVlRUlPV9WlqaqlWrps6dO8vLy6sEKytcr8YuKlC/bt26lcm+AADkpVQEosjISH3zzTfasmWLqlatal3u7++vmzdv6tKlSzajRGfOnJG/v7+1za5du2y2l/0U2p1t7n4y7cyZM/Ly8soxOiRJLi4ucnFxybHcyckp30NvD7MHOQdlsS8A4OFXok+ZGYahyMhIffnll9qwYYOCgoJs1jdt2lROTk5av369dVliYqKSk5MVFhYmSQoLC9PBgwd19uxZa5vY2Fh5eXmpbt261jZ3biO7TfY2AACAuZXoCFFERISWLVumr776Sp6entY5P97e3nJzc5O3t7eGDRumqKgoVaxYUV5eXnr11VcVFhamFi1aSJI6d+6sunXr6oUXXtDUqVOVmpqqN954QxEREdZRnv/93//V+++/r9dee01Dhw7Vhg0b9O9//1vffvttiR07AAAoPUp0hGju3Lm6fPmy2rVrpypVqlhfn332mbXNzJkz9cwzz6hv375q06aN/P39tXLlSut6BwcHffPNN3JwcFBYWJief/55DRw4UJMmTbK2CQoK0rfffqvY2Fg1atRI06dP10cffcQj9wAAQFIJjxAZhnHfNq6urpozZ47mzJmTZ5vAwMD7PkXUrl077du3z+4aAQDAw4/fMgMAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKbnWNIFAMWleuSHBeqX/P7wQq4EAFDaMEIEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMj0AEAABMr0QD0ZYtW9SjRw8FBATIYrFo1apVNusHDx4si8Vi8+rSpYtNmwsXLmjAgAHy8vKSj4+Phg0bpqtXr9q0OXDggFq3bi1XV1dVq1ZNU6dOLepDAwAAZUiJBqJr166pUaNGmjNnTp5tunTpopSUFOtr+fLlNusHDBigw4cPKzY2Vt988422bNmi4cOHW9enpaWpc+fOCgwMVHx8vKZNm6YJEyboww8/LLLjAgAAZYtjSe68a9eu6tq16z3buLi4yN/fP9d1P/74o1avXq3du3erWbNmkqR//vOf6tatm959910FBAQoJiZGN2/e1MKFC+Xs7Kx69eopISFBM2bMsAlOAADAvEr9HKJNmzbJ19dXoaGhevnll3X+/Hnruri4OPn4+FjDkCR16tRJ5cqV086dO61t2rRpI2dnZ2ub8PBwJSYm6uLFi8V3IAAAoNQq0RGi++nSpYv69OmjoKAgHT9+XH/729/UtWtXxcXFycHBQampqfL19bXp4+joqIoVKyo1NVWSlJqaqqCgIJs2fn5+1nUVKlTIsd/09HSlp6db36elpUmSMjIylJGRUajHWBY9yDkwW18AQMlycnLKV7tSHYj69etn/e8GDRqoYcOGqlmzpjZt2qSOHTsW2X6nTJmiiRMn5li+du1aubu7F9l+y4rvvvuOvgCAMqFnz575aleqA9HdHnvsMVWqVEnHjh1Tx44d5e/vr7Nnz9q0uXXrli5cuGCdd+Tv768zZ87YtMl+n9fcpOjoaEVFRVnfp6WlqVq1aurcubO8vLwK85BK1KuxiwrUr1u3bqbrCwB4uJWpQHTq1CmdP39eVapUkSSFhYXp0qVLio+PV9OmTSVJGzZsUFZWlpo3b25t8/rrrysjI8M6bBYbG6vQ0NBcb5dJtydyu7i45Fju5OSU76G3h9mDnAOz9QUAlA0lOqn66tWrSkhIUEJCgiQpKSlJCQkJSk5O1tWrVzVu3Djt2LFDJ06c0Pr169WzZ0/VqlVL4eHhkqQ6deqoS5cueumll7Rr1y5t375dkZGR6tevnwICAiRJzz33nJydnTVs2DAdPnxYn332mWbNmmUzAgQAAMytRAPRnj171KRJEzVp0kSSFBUVpSZNmujNN9+Ug4ODDhw4oD/84Q8KCQnRsGHD1LRpU23dutVm9CYmJka1a9dWx44d1a1bN7Vq1crmO4a8vb21du1aJSUlqWnTphozZozefPNNHrkHAABWJXrLrF27djIMI8/1a9asue82KlasqGXLlt2zTcOGDbV161a76wMAAOZQ6r+HCAAAoKgRiAAAgOkRiAAAgOnZHYh+/vnnoqgDAACgxNgdiGrVqqX27dtr6dKlunHjRlHUBAAAUKzsDkR79+5Vw4YNFRUVJX9/f/35z3/Wrl27iqI2AACAYmF3IGrcuLFmzZql06dPa+HChUpJSVGrVq1Uv359zZgxQ+fOnSuKOgEAAIpMgSdVOzo6qk+fPlqxYoXeeecdHTt2TGPHjlW1atU0cOBApaSkFGadAAAARabAgWjPnj165ZVXVKVKFc2YMUNjx47V8ePHFRsbq9OnT+f712UBAABKmt3fVD1jxgwtWrRIiYmJ6tatmz755BN169ZN5crdzlZBQUFavHixatSoUdi1AgAAFAm7A9HcuXM1dOhQDR482Pqr83fz9fXVggULHrg4AACA4mB3IDp69Oh92zg7O2vQoEEFKggAAKC42T2HaNGiRVqxYkWO5StWrNDHH39cKEUBAAAUJ7sD0ZQpU1SpUqUcy319ffX2228XSlEAAADFye5AlJycrKCgoBzLAwMDlZycXChFAQAAFCe7A5Gvr68OHDiQY/n+/fv1yCOPFEpRAAAAxcnuQNS/f3+NGDFCGzduVGZmpjIzM7VhwwaNHDlS/fr1K4oaAQAAipTdT5lNnjxZJ06cUMeOHeXoeLt7VlaWBg4cyBwiAABQJtkdiJydnfXZZ59p8uTJ2r9/v9zc3NSgQQMFBgYWRX0AAABFzu5AlC0kJEQhISGFWQsAAECJsDsQZWZmavHixVq/fr3Onj2rrKwsm/UbNmwotOIAAACKg92BaOTIkVq8eLG6d++u+vXry2KxFEVdAAAAxcbuQPTpp5/q3//+t7p161YU9QAAABQ7ux+7d3Z2Vq1atYqiFgAAgBJhdyAaM2aMZs2aJcMwiqIeAACAYmf3LbNt27Zp48aN+u9//6t69erJycnJZv3KlSsLrTgAAIDiYHcg8vHxUe/evYuiFgAAgBJhdyBatGhRUdQBAABQYuyeQyRJt27d0rp16zR//nxduXJFknT69GldvXq1UIsDAAAoDnaPEJ08eVJdunRRcnKy0tPT9fTTT8vT01PvvPOO0tPTNW/evKKoEwAAoMjYPUI0cuRINWvWTBcvXpSbm5t1ee/evbV+/fpCLQ4AAKA42D1CtHXrVn3//fdydna2WV6jRg39+uuvhVYYAABAcbF7hCgrK0uZmZk5lp86dUqenp6FUhQAAEBxsjsQde7cWe+99571vcVi0dWrVzV+/Hh+zgMAAJRJdt8ymz59usLDw1W3bl3duHFDzz33nI4ePapKlSpp+fLlRVEjAABAkbI7EFWtWlX79+/Xp59+qgMHDujq1asaNmyYBgwYYDPJGgAAoKywOxBJkqOjo55//vnCrgUAAKBE2B2IPvnkk3uuHzhwYIGLAQAAKAl2B6KRI0favM/IyNDvv/8uZ2dnubu7E4gAAECZY/dTZhcvXrR5Xb16VYmJiWrVqhWTqgEAQJlUoN8yu1twcLD+8Y9/5Bg9AgAAKAsKNKk61w05Our06dOFtTmg1Kke+aHdfZLfH14ElQAACpvdgejrr7+2eW8YhlJSUvT++++rZcuWhVYYAABAcbE7EPXq1cvmvcViUeXKldWhQwdNnz69sOoCAAAoNnYHoqysrKKoAwAAoMQUyqRqAACAsszuEaKoqKh8t50xY4a9mwcAACh2dgeiffv2ad++fcrIyFBoaKgk6ciRI3JwcNDjjz9ubWexWAqvSgAAgCJkdyDq0aOHPD099fHHH6tChQqSbn9Z45AhQ9S6dWuNGTOm0IsEAAAoSnbPIZo+fbqmTJliDUOSVKFCBb311ls8ZQYAAMokuwNRWlqazp07l2P5uXPndOXKlUIpCgAAoDjZHYh69+6tIUOGaOXKlTp16pROnTqlL774QsOGDVOfPn2KokYAAIAiZfcconnz5mns2LF67rnnlJGRcXsjjo4aNmyYpk2bVugFAgAAFDW7A5G7u7s++OADTZs2TcePH5ck1axZUx4eHoVeHAAAQHEo8BczpqSkKCUlRcHBwfLw8JBhGIVZFwAAQLGxOxCdP39eHTt2VEhIiLp166aUlBRJ0rBhw3jkHgAAlEl2B6LRo0fLyclJycnJcnd3ty5/9tlntXr16kItDgAAoDjYPYdo7dq1WrNmjapWrWqzPDg4WCdPniy0wgAAAIqL3SNE165dsxkZynbhwgW5uLgUSlEAAADFye5A1Lp1a33yySfW9xaLRVlZWZo6darat29fqMUBAAAUB7tvmU2dOlUdO3bUnj17dPPmTb322ms6fPiwLly4oO3btxdFjQAAAEXK7hGi+vXr68iRI2rVqpV69uypa9euqU+fPtq3b59q1qxZFDUCAAAUKbtGiDIyMtSlSxfNmzdPr7/+elHVBAAAUKzsGiFycnLSgQMHiqoWAACAEmH3LbPnn39eCxYsKIpaAAAASoTdgejWrVuaO3eumjVrpj//+c+Kioqyedljy5Yt6tGjhwICAmSxWLRq1Sqb9YZh6M0331SVKlXk5uamTp066ejRozZtLly4oAEDBsjLy0s+Pj4aNmyYrl69atPmwIEDat26tVxdXVWtWjVNnTrV3sMGAAAPsXwFogMHDigrK0uSdOjQIT3++OPy9PTUkSNHtG/fPusrISHBrp1fu3ZNjRo10pw5c3JdP3XqVM2ePVvz5s3Tzp075eHhofDwcN24ccPaZsCAATp8+LBiY2P1zTffaMuWLRo+fLh1fVpamjp37qzAwEDFx8dr2rRpmjBhgj788EO7agUAAA+vfE2qbtKkiVJSUuTr66uTJ09q9+7deuSRRx545127dlXXrl1zXWcYht577z298cYb6tmzpyTpk08+kZ+fn1atWqV+/frpxx9/1OrVq7V79241a9ZMkvTPf/5T3bp107vvvquAgADFxMTo5s2bWrhwoZydnVWvXj0lJCRoxowZNsEJAACYV74CkY+Pj5KSkuTr66sTJ05YR4uKUlJSklJTU9WpUyfrMm9vbzVv3lxxcXHq16+f4uLi5OPjYw1DktSpUyeVK1dOO3fuVO/evRUXF6c2bdrI2dnZ2iY8PFzvvPOOLl68qAoVKuTYd3p6utLT063v09LSJN1+yi4jI6MoDrdMeZBzQF8AQHFycnLKV7t8BaK+ffuqbdu2qlKliiwWi5o1ayYHB4dc2/7888/5r/IeUlNTJUl+fn42y/38/KzrUlNT5evra7Pe0dFRFStWtGkTFBSUYxvZ63ILRFOmTNHEiRNzLF+7dm2uP1tSkl6NPVOgfv982u/+jfLw3Xff0bcY+gIAHlz2Xab7yVcg+vDDD9WnTx8dO3ZMI0aM0EsvvSRPT88HKrA0i46OtpkgnpaWpmrVqqlz587y8vIqwcpyejV2UYH6devWjb529JUKdq6z+wIASrd8fzFjly5dJEnx8fEaOXJkkQcif39/SdKZM2dUpUoV6/IzZ86ocePG1jZnz5616Xfr1i1duHDB2t/f319nztiOomS/z25zNxcXl1x/qNbJySnfQ2+l3YMcB32Lpy8AoPjY/dj9okWLimV0KCgoSP7+/lq/fr11WVpamnbu3KmwsDBJUlhYmC5duqT4+Hhrmw0bNigrK0vNmze3ttmyZYvNXI7Y2FiFhobmersMAACYj92BqDBdvXpVCQkJ1sf1k5KSlJCQoOTkZFksFo0aNUpvvfWWvv76ax08eFADBw5UQECAevXqJUmqU6eOunTpopdeekm7du3S9u3bFRkZqX79+ikgIECS9Nxzz8nZ2VnDhg3T4cOH9dlnn2nWrFl2f2cSAAB4eNn9a/eFac+ePWrfvr31fXZIGTRokBYvXqzXXntN165d0/Dhw3Xp0iW1atVKq1evlqurq7VPTEyMIiMj1bFjR5UrV059+/bV7Nmzreu9vb21du1aRUREqGnTpqpUqZLefPNNHrkHAABWJRqI2rVrJ8Mw8lxvsVg0adIkTZo0Kc82FStW1LJly+65n4YNG2rr1q0FrhMAADzcSvSWGQAAQGlAIAIAAKZHIAIAAKZHIAIAAKZHIAIAAKZXok+ZAWZRPfJDu/skv89XQwBAcWGECAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmJ5jSRcA4N6qR35od5/k94cXQSUA8PBihAgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJgegQgAAJheqQ5EEyZMkMVisXnVrl3buv7GjRuKiIjQI488ovLly6tv3746c+aMzTaSk5PVvXt3ubu7y9fXV+PGjdOtW7eK+1AAAEAp5ljSBdxPvXr1tG7dOut7R8f/V/Lo0aP17bffasWKFfL29lZkZKT69Omj7du3S5IyMzPVvXt3+fv76/vvv1dKSooGDhwoJycnvf3228V+LAAAoHQq9YHI0dFR/v7+OZZfvnxZCxYs0LJly9ShQwdJ0qJFi1SnTh3t2LFDLVq00Nq1a/XDDz9o3bp18vPzU+PGjTV58mT95S9/0YQJE+Ts7FzchwMAAEqhUh+Ijh49qoCAALm6uiosLExTpkxR9erVFR8fr4yMDHXq1Mnatnbt2qpevbri4uLUokULxcXFqUGDBvLz87O2CQ8P18svv6zDhw+rSZMmue4zPT1d6enp1vdpaWmSpIyMDGVkZBTRkRavBzkO+j7cfQHgYeLk5JSvdqU6EDVv3lyLFy9WaGioUlJSNHHiRLVu3VqHDh1SamqqnJ2d5ePjY9PHz89PqampkqTU1FSbMJS9PntdXqZMmaKJEyfmWL527Vq5u7s/4FGVDt999x196QsAD72ePXvmq12pDkRdu3a1/nfDhg3VvHlzBQYG6t///rfc3NyKbL/R0dGKioqyvk9LS1O1atXUuXNneXl5Fdl+C+LV2EUF6tetWzf62tFXKti5Lum+NUfb3/f4zCF29wGAsq5UB6K7+fj4KCQkRMeOHdPTTz+tmzdv6tKlSzajRGfOnLHOOfL399euXbtstpH9FFpu85Kyubi4yMXFJcdyJyenfA+9lXYPchz0pS8APGxK9WP3d7t69aqOHz+uKlWqqGnTpnJyctL69eut6xMTE5WcnKywsDBJUlhYmA4ePKizZ89a28TGxsrLy0t169Yt9voBAEDpVKpHiMaOHasePXooMDBQp0+f1vjx4+Xg4KD+/fvL29tbw4YNU1RUlCpWrCgvLy+9+uqrCgsLU4sWLSRJnTt3Vt26dfXCCy9o6tSpSk1N1RtvvKGIiIhcR4AAAIA5lepAdOrUKfXv31/nz59X5cqV1apVK+3YsUOVK1eWJM2cOVPlypVT3759lZ6ervDwcH3wwQfW/g4ODvrmm2/08ssvKywsTB4eHho0aJAmTZpUUocEAABKoVIdiD799NN7rnd1ddWcOXM0Z86cPNsEBgbyxA0AALinMjWHCAAAoCgQiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOkRiAAAgOmV6t8yA1Byqkd+aHef5PeHF0ElAFD0GCECAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACm51jSBUCqHvlhgfolvz+8kCsBAMCcGCECAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACmx2P3AApdQb5Kgq+RAFCSGCECAACmRyACAACmxy0zAKUK39wOoCQwQgQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPQAQAAEyPn+4A8NDgZz8AFBQjRAAAwPQIRAAAwPQIRAAAwPSYQwQAYv4RYHaMEAEAANMjEAEAANMjEAEAANMjEAEAANMjEAEAANMjEAEAANPjsXsAeEA8sg+UfYwQAQAA0yMQAQAA0yMQAQAA02MOEQCUIOYfAaUDI0QAAMD0TBWI5syZoxo1asjV1VXNmzfXrl27SrokAABQCpgmEH322WeKiorS+PHjtXfvXjVq1Ejh4eE6e/ZsSZcGAABKmGnmEM2YMUMvvfSShgwZIkmaN2+evv32Wy1cuFB//etfS7g6ALAf84+AwmOKQHTz5k3Fx8crOjrauqxcuXLq1KmT4uLiSrAyACgZDxqmCtKfIIbSzBSB6LffflNmZqb8/Pxslvv5+emnn37K0T49PV3p6enW95cvX5YkXbhwQRkZGYVeX9bN6wXqd/78efoWU1+pYJ8TfYunb3Z/+hZPX+nBPuNG0Uvt7rt/yvMl2hdll5OTkzw9PWWxWO7d0DCBX3/91ZBkfP/99zbLx40bZzz55JM52o8fP96QxIsXL168ePF6CF6XL1++b1YwxQhRpUqV5ODgoDNnztgsP3PmjPz9/XO0j46OVlRUlPV9VlaWLly4oEceeeT+CRP5lpaWpmrVqumXX36Rl5dXSZfz0OC8Fg3Oa9HgvBYNzqstT0/P+7YxRSBydnZW06ZNtX79evXq1UvS7ZCzfv16RUZG5mjv4uIiFxcXm2U+Pj7FUKk5eXl58Qe2CHBeiwbntWhwXosG5zX/TBGIJCkqKkqDBg1Ss2bN9OSTT+q9997TtWvXrE+dAQAA8zJNIHr22Wd17tw5vfnmm0pNTVXjxo21evXqHBOtAQCA+ZgmEElSZGRkrrfIUDJcXFw0fvz4HLcn8WA4r0WD81o0OK9Fg/NqP4thGEZJFwEAAFCSTPPTHQAAAHkhEAEAANMjEAEAANMjEAEAANMjEKHIbdmyRT169FBAQIAsFotWrVpls94wDL355puqUqWK3Nzc1KlTJx09erRkii0jpkyZoieeeEKenp7y9fVVr169lJiYaNPmxo0bioiI0COPPKLy5curb9++Ob6tHbbmzp2rhg0bWr/MLiwsTP/973+t6zmnheMf//iHLBaLRo0aZV3GubXfhAkTZLFYbF61a9e2ruec2odAhCJ37do1NWrUSHPmzMl1/dSpUzV79mzNmzdPO3fulIeHh8LDw3Xjxo1irrTs2Lx5syIiIrRjxw7FxsYqIyNDnTt31rVr16xtRo8erf/85z9asWKFNm/erNOnT6tPnz4lWHXpV7VqVf3jH/9QfHy89uzZow4dOqhnz546fPiwJM5pYdi9e7fmz5+vhg0b2izn3BZMvXr1lJKSYn1t27bNuo5zaqfC+flUIH8kGV9++aX1fVZWluHv729MmzbNuuzSpUuGi4uLsXz58hKosGw6e/asIcnYvHmzYRi3z6GTk5OxYsUKa5sff/zRkGTExcWVVJllUoUKFYyPPvqIc1oIrly5YgQHBxuxsbFG27ZtjZEjRxqGwfVaUOPHjzcaNWqU6zrOqf0YIUKJSkpKUmpqqjp16mRd5u3trebNmysuLq4EKytbLl++LEmqWLGiJCk+Pl4ZGRk257V27dqqXr065zWfMjMz9emnn+ratWsKCwvjnBaCiIgIde/e3eYcSlyvD+Lo0aMKCAjQY489pgEDBig5OVkS57QgTPVN1Sh9UlNTJSnHT6j4+flZ1+HesrKyNGrUKLVs2VL169eXdPu8Ojs75/hRYs7r/R08eFBhYWG6ceOGypcvry+//FJ169ZVQkIC5/QBfPrpp9q7d692796dYx3Xa8E0b95cixcvVmhoqFJSUjRx4kS1bt1ahw4d4pwWAIEIKOMiIiJ06NAhm7kDKLjQ0FAlJCTo8uXL+vzzzzVo0CBt3ry5pMsq03755ReNHDlSsbGxcnV1LelyHhpdu3a1/nfDhg3VvHlzBQYG6t///rfc3NxKsLKyiVtmKFH+/v6SlOPJhzNnzljXIW+RkZH65ptvtHHjRlWtWtW63N/fXzdv3tSlS5ds2nNe78/Z2Vm1atVS06ZNNWXKFDVq1EizZs3inD6A+Ph4nT17Vo8//rgcHR3l6OiozZs3a/bs2XJ0dJSfnx/nthD4+PgoJCREx44d43otAAIRSlRQUJD8/f21fv1667K0tDTt3LlTYWFhJVhZ6WYYhiIjI/Xll19qw4YNCgoKslnftGlTOTk52ZzXxMREJScnc17tlJWVpfT0dM7pA+jYsaMOHjyohIQE66tZs2YaMGCA9b85tw/u6tWrOn78uKpUqcL1WgDcMkORu3r1qo4dO2Z9n5SUpISEBFWsWFHVq1fXqFGj9NZbbyk4OFhBQUH6v//7PwUEBKhXr14lV3QpFxERoWXLlumrr76Sp6endU6At7e33Nzc5O3trWHDhikqKkoVK1aUl5eXXn31VYWFhalFixYlXH3pFR0dra5du6p69eq6cuWKli1bpk2bNmnNmjWc0wfg6elpnd+WzcPDQ4888oh1OefWfmPHjlWPHj0UGBio06dPa/z48XJwcFD//v25XguipB9zw8Nv48aNhqQcr0GDBhmGcfvR+//7v/8z/Pz8DBcXF6Njx45GYmJiyRZdyuV2PiUZixYtsra5fv268corrxgVKlQw3N3djd69exspKSklV3QZMHToUCMwMNBwdnY2KleubHTs2NFYu3atdT3ntPDc+di9YXBuC+LZZ581qlSpYjg7OxuPPvqo8eyzzxrHjh2zruec2sdiGIZRQlkMAACgVGAOEQAAMD0CEQAAMD0CEQAAMD0CEQAAMD0CEQAAMD0CEQAAMD0CEQAAMD0CEWBiFotFq1atKuky7NauXTuNGjXKrj5FeawTJkxQ48aNi2Tbd1u/fr3q1KmjzMzMYtnfnebNm6cePXoU+36B4kAgAh4igwcPLtafPFm8eLEsFossFovKlSunqlWrasiQITp79myR7nflypWaPHmyXX1SUlKsvw5+4sQJWSwWJSQk2L3v3ILV2LFjbX4zqii99tpreuONN+Tg4FAs+7vT0KFDtXfvXm3durXY9w0UNX7LDMAD8fLyUmJiorKysrR//34NGTJEp0+f1po1a3K0zczMtIanB1GxYkW7+xTlL3yXL19e5cuXL7LtZ9u2bZuOHz+uvn37Fvm+cuPs7KznnntOs2fPVuvWrUukBqCoMEIEPKRq1Kih9957z2ZZ48aNNWHChFzbd+jQQZGRkTbLzp07J2dn53uOflgsFvn7+ysgIEBdu3bViBEjtG7dOl2/fl2LFy+Wj4+Pvv76a9WtW1cuLi5KTk5Wenq6xo4dq0cffVQeHh5q3ry5Nm3aZLPd7du3q127dnJ3d1eFChUUHh6uixcvSsp5y6xGjRqaPHmy+vfvLw8PDz366KOaM2dOjjqzR3aCgoIkSU2aNJHFYlG7du0kSbt379bTTz+tSpUqydvbW23bttXevXtt9iNJvXv3lsVisb6/+5ZZVlaWJk2apKpVq8rFxUWNGzfW6tWrreuzR6hWrlyp9u3by93dXY0aNVJcXFye51mSPv30Uz399NNydXW1Lsve98KFC1W9enWVL19er7zyijIzMzV16lT5+/vL19dXf//733Ocj/nz5+uZZ56Ru7u76tSpo7i4OB07dkzt2rWTh4eHnnrqKR0/ftymX48ePfT111/r+vXr96wVKGsIRAAkSS+++KKWLVum9PR067KlS5fq0UcfVYcOHfK9HTc3N2VlZenWrVuSpN9//13vvPOOPvroIx0+fFi+vr6KjIxUXFycPv30Ux04cEB/+tOf1KVLFx09elSSlJCQoI4dO6pu3bqKi4vTtm3b1KNHj3vOm5k2bZoaNWqkffv26a9//atGjhyp2NjYXNvu2rVLkrRu3TqlpKRo5cqVkqQrV65o0KBB2rZtm3bs2KHg4GB169ZNV65ckXQ7MEnSokWLlJKSYn1/t1mzZmn69Ol69913deDAAYWHh+sPf/iD9fiyvf766xo7dqwSEhIUEhKi/v37W89bbrZu3apmzZrlWH78+HH997//1erVq7V8+XItWLBA3bt316lTp7R582a98847euONN7Rz506bfpMnT9bAgQOVkJCg2rVr67nnntOf//xnRUdHa8+ePTIMI0dIbtasmW7dupVjW0CZV8I/LgugEA0aNMjo2bOnYRiGERgYaMycOdNmfaNGjYzx48db30syvvzyS8Mwbv8ydoUKFYzPPvvMur5hw4bGhAkT8tzfokWLDG9vb+v7I0eOGCEhIUazZs2s6yUZCQkJ1jYnT540HBwcjF9//dVmWx07djSio6MNwzCM/v37Gy1btsxzv3f/UnpgYKDRpUsXmzbPPvus0bVr11yPNSkpyZBk7Nu3L899GIZhZGZmGp6ensZ//vOfXLeTbfz48UajRo2s7wMCAoy///3vNm2eeOIJ45VXXrHZ/0cffWRdf/jwYUOS8eOPP+ZZj7e3t/HJJ5/k2Le7u7uRlpZmXRYeHm7UqFHDyMzMtC4LDQ01pkyZYnMcb7zxhvV9XFycIclYsGCBddny5csNV1fXHHVUqFDBWLx4cZ51AmURI0QAJEmurq564YUXtHDhQknS3r17dejQIQ0ePPie/S5fvqzy5cvL3d1doaGh8vPzU0xMjHW9s7OzGjZsaH1/8OBBZWZmKiQkxDr3pnz58tq8ebP19kz2CJE9wsLCcrz/8ccf7drGmTNn9NJLLyk4OFje3t7y8vLS1atXlZycnO9tpKWl6fTp02rZsqXN8pYtW+ao587zUqVKFUm654T069ev29wuy1ajRg15enpa3/v5+alu3bo2c7X8/PxybPvO/fv5+UmSGjRoYLPsxo0bSktLs+nn5uam33//Pc86gbKISdXAQ6pcuXIyDMNmWUZGxj37vPjii2rcuLFOnTqlRYsWqUOHDgoMDLxnH09PT+3du1flypVTlSpV5ObmZrPezc1NFovF+v7q1atycHBQfHx8jielsicm372N4jJo0CCdP39es2bNUmBgoFxcXBQWFqabN28Wyf6cnJys/519jrKysvJsX6lSJes8qry2k72t3Jbdve3c9p+fmi5cuKDKlSvnWSdQFjFCBDykKleurJSUFOv7tLQ0JSUl3bNPgwYN1KxZM/3rX//SsmXLNHTo0Pvup1y5cqpVq5Yee+yxfAWZJk2aKDMzU2fPnlWtWrVsXtlPgjVs2NDux9h37NiR432dOnVybevs7CxJOeYkbd++XSNGjFC3bt1Ur149ubi46LfffrNp4+TkdM+5TF5eXgoICND27dtzbLtu3br5Pp7cNGnSRD/88MMDbeNBHT9+XDdu3FCTJk1KtA6gsBGIgIdUhw4dtGTJEm3dulUHDx7UoEGD8vXdNS+++KL+8Y9/yDAM9e7du9DrCgkJ0YABAzRw4ECtXLlSSUlJ2rVrl6ZMmaJvv/1WkhQdHa3du3frlVde0YEDB/TTTz9p7ty5OcLJnbZv366pU6fqyJEjmjNnjlasWKGRI0fm2tbX11dubm5avXq1zpw5o8uXL0uSgoODtWTJEv3444/auXOnBgwYkCPk1ahRQ+vXr1dqamquozWSNG7cOL3zzjv67LPPlJiYqL/+9a9KSEjIs578Cg8P17Zt2x5oGw9q69ateuyxx1SzZs0SrQMobAQi4CGSlZUlR8fbd8Kjo6PVtm1bPfPMM+revbt69eqVr7/E+vfvL0dHR/Xv3z/X+SqFYdGiRRo4cKDGjBmj0NBQ9erVS7t371b16tUl3Q5Na9eu1f79+/Xkk08qLCxMX331lfXYcjNmzBjt2bNHTZo00VtvvaUZM2YoPDw817aOjo6aPXu25s+fr4CAAPXs2VOStGDBAl28eFGPP/64XnjhBY0YMUK+vr42fadPn67Y2FhVq1Ytz1GSESNGKCoqSmPGjFGDBg20evVqff311woODi7I6bIaMGCADh8+rMTExAfazoNYvny5XnrppRLbP1BULMbdkwwAlFldunRRrVq19P777xd4GydOnFDNmjW1e/duPf7444VYXdGpUaOGRo0aZffPeZRF48aNU1pamubPn1/s+z58+LA6dOigI0eOyNvbu9j3DxQlRoiAh8DFixf1zTffaNOmTerUqVOBtpGRkaHU1FS98cYbatGiRZkJQ2bz+uuvKzAw8J6Tr4tKSkqKPvnkE8IQHko8ZQY8BIYOHardu3drzJgx1ts/9tq+fbvat2+vkJAQff7554VcIQqLj4+P/va3v5XIvgsatoGygFtmAADA9LhlBgAATI9ABAAATI9ABAAATI9ABAAATI9ABAAATI9ABAAATI9ABAAATI9ABAAATI9ABAAATO//Ayo5h5itCEelAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "# load some data\n", - "normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands()\n", - "\n", - "# Make a point sample of climate variables for a region in western USA.\n", - "region = ee.Geometry.Rectangle(-123.41, 40.43, -116.38, 45.14)\n", - "climSamp = normClim.sample(region, 5000)\n", - "\n", - "\n", - "# initialize the plot with the ecoregions data\n", - "ax = climSamp.geetools.plot_hist(\n", - " property = \"07_ppt\",\n", - " label = \"July Precipitation (mm)\",\n", - " color = '#1d6b99',\n", - " ax = ax,\n", - " bins = 30\n", - ")\n", - "\n", - "# once created the axes can be modified as needed using pure matplotlib functions\n", - "ax.set_title(\"July Precipitation Distribution for NW USA\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/index.rst b/docs/index.rst index 5963455..b0b3359 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,8 +7,8 @@ geetools .. toctree:: :hidden: + setup/index usage/index - example/index autoapi/index Changelogs earth-engine API diff --git a/docs/usage/author.rst b/docs/setup/author.rst similarity index 100% rename from docs/usage/author.rst rename to docs/setup/author.rst diff --git a/docs/usage/contribute.rst b/docs/setup/contribute.rst similarity index 100% rename from docs/usage/contribute.rst rename to docs/setup/contribute.rst diff --git a/docs/setup/index.rst b/docs/setup/index.rst new file mode 100644 index 0000000..378e471 --- /dev/null +++ b/docs/setup/index.rst @@ -0,0 +1,46 @@ +Setup +===== + +Overview +-------- + +The User Guide covers all of **geetools** by topic area. The :doc:`quickstart` page is a good place to start if you are new to the package or just want to refresh your memory. The :doc:`layout` page provides a high-level overview of the package's layout, and the :doc:`pattern` page provides a high-level overview of the package's design decsisions. + +The use of the package requires a basic understanding of the **Python** programming language and the **GEE Python API**. Users brand-new to Earth Engine should refer to the `Google documentation `__ first. + +Further hands-on example of specific tasks can be found in the :doc:`../example/index` section. and for the most advance user please refe to the :doc:`../autoapi/index` section for a complete description of each individual functionality. + +Refactoring +----------- + +Since version v1.0.0, the package has been drastically modified to adopt the extension pattern (see :doc:`pattern` for more information). Many functions have also bee dropped or fully refactored to improve overall performances, and to make the package more consistent and easy to use. For more information about the miregation process please refer to the :doc:`migration` page. + +.. important:: + + The refactoring process is not finished yet, we will progressively reintegrate all the methods in the new pattern and add many cool functionalities. If any of your previous is not working anymore and the :doc:`migration` page did not provided any solution, please open an issue in the `GitHub repository `__. + +.. toctree:: + :hidden: + :caption: Get started + + install + quickstart + layout + +.. toctree:: + :hidden: + :caption: Extension Layout + + pattern + migration + inspiration + +.. toctree:: + :hidden: + :caption: Contributor guide + + contribute + author + license + + diff --git a/docs/usage/inspiration.rst b/docs/setup/inspiration.rst similarity index 100% rename from docs/usage/inspiration.rst rename to docs/setup/inspiration.rst diff --git a/docs/usage/install.rst b/docs/setup/install.rst similarity index 100% rename from docs/usage/install.rst rename to docs/setup/install.rst diff --git a/docs/usage/layout.rst b/docs/setup/layout.rst similarity index 100% rename from docs/usage/layout.rst rename to docs/setup/layout.rst diff --git a/docs/usage/license.rst b/docs/setup/license.rst similarity index 100% rename from docs/usage/license.rst rename to docs/setup/license.rst diff --git a/docs/usage/migration.rst b/docs/setup/migration.rst similarity index 100% rename from docs/usage/migration.rst rename to docs/setup/migration.rst diff --git a/docs/usage/pattern.rst b/docs/setup/pattern.rst similarity index 100% rename from docs/usage/pattern.rst rename to docs/setup/pattern.rst diff --git a/docs/usage/quickstart.rst b/docs/setup/quickstart.rst similarity index 100% rename from docs/usage/quickstart.rst rename to docs/setup/quickstart.rst diff --git a/docs/example/asset.ipynb b/docs/usage/asset.ipynb similarity index 100% rename from docs/example/asset.ipynb rename to docs/usage/asset.ipynb diff --git a/docs/usage/asset/index.rst b/docs/usage/asset/index.rst new file mode 100644 index 0000000..e69de29 diff --git a/docs/usage/index.rst b/docs/usage/index.rst index 75f6045..69085e9 100644 --- a/docs/usage/index.rst +++ b/docs/usage/index.rst @@ -1,46 +1,43 @@ -User guide -========== +Usage +===== Overview -------- -The User Guide covers all of **geetools** by topic area. The :doc:`quickstart` page is a good place to start if you are new to the package or just want to refresh your memory. The :doc:`layout` page provides a high-level overview of the package's layout, and the :doc:`pattern` page provides a high-level overview of the package's design decsisions. +This section gathered many real life examples of the Lib usage gathered by the community. +If you think your workflow should be shared please open a PR and follow the contribution guildelines shared in the next section. -The use of the package requires a basic understanding of the **Python** programming language and the **GEE Python API**. Users brand-new to Earth Engine should refer to the `Google documentation `__ first. +.. warning:: -Further hands-on example of specific tasks can be found in the :doc:`../example/index` section. and for the most advance user please refe to the :doc:`../autoapi/index` section for a complete description of each individual functionality. + The example gallery is a work in progress as the library was recently refactored. + All contributions are welcolmed! -Refactoring ------------ +Add a new example +----------------- -Since version v1.0.0, the package has been drastically modified to adopt the extension pattern (see :doc:`pattern` for more information). Many functions have also bee dropped or fully refactored to improve overall performances, and to make the package more consistent and easy to use. For more information about the miregation process please refer to the :doc:`migration` page. +.. image:: /_static/we-need-you.jpg + :alt: We need you! + :align: center -.. important:: +Currently most of the examples built by `@Rodrigo `__ are still using the old implementation of the library. +They should be transformed into modern example and moved from the old `notebook `__ folder to the new `example `__ one to be displayed in our doc. - The refactoring process is not finished yet, we will progressively reintegrate all the methods in the new pattern and add many cool functionalities. If any of your previous is not working anymore and the :doc:`migration` page did not provided any solution, please open an issue in the `GitHub repository `__. +The examples are regular notebook files that are interpreted by the ``myst-nb`` lib and displayed in the doc, clicking on the :guilabel:`open in colab` button will open a colab notebook with the code ready to be executed and the :guilabel:`view source` will bring you back to github. -.. toctree:: - :hidden: - :caption: Get started +To add a new example, you can use the `example template `__ and replace things with your code. - install - quickstart - layout +Adapt the code of the 2 first buttons to your file so users can lunch it in collab and view the source in github. -.. toctree:: - :hidden: - :caption: Extension Layout +.. code-block:: md - pattern - migration - inspiration + [![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee_community/geetools/blob/main/docs/example/template.ipynb) + [![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee_community/gee_tools/blob/main/docs/example/template.ipynb) -.. toctree:: - :hidden: - :caption: Contributor guide - contribute - author - license +Then you can open a PR with the new file and it will be reviewed and merged. +.. toctree:: + :hidden: + template + plot/index \ No newline at end of file diff --git a/docs/usage/plot/index.rst b/docs/usage/plot/index.rst new file mode 100644 index 0000000..b32417d --- /dev/null +++ b/docs/usage/plot/index.rst @@ -0,0 +1,13 @@ +Plotting +======== + +We embed some plotting capabilities in the library to help you visualize your data. + +.. toctree:: + :hidden: + + plot-featurecollection + plot-image + plot-imagecollection + map-image + map-featurecollection \ No newline at end of file diff --git a/docs/usage/plot/map-featurecollection.ipynb b/docs/usage/plot/map-featurecollection.ipynb new file mode 100644 index 0000000..2138c2a --- /dev/null +++ b/docs/usage/plot/map-featurecollection.ipynb @@ -0,0 +1,58 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Map `FeatureCollection`\n", + "\n", + "The `geetools` extension contains a set of functions for rendering maps from `ee.FeatureCollection` objects. Use the following function descriptions and examples to determine the best function and chart type for your purpose." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import ee, pytest_gee, os\n", + "\n", + "if \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", + "elif \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + " pytest_gee.init_ee_from_service_account()\n", + "else:\n", + " raise ValueError(\"Cannot authenticate with Earth Engine.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ee\n", + "\n", + "ee.Number(1).getInfo()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/usage/plot/map-image.ipynb b/docs/usage/plot/map-image.ipynb new file mode 100644 index 0000000..c327c6c --- /dev/null +++ b/docs/usage/plot/map-image.ipynb @@ -0,0 +1,27 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Map `Image`\n", + "\n", + "```{warning}\n", + "This notebook is a work in progress. It is not yet functional.\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/usage/plot/plot-featurecollection.ipynb b/docs/usage/plot/plot-featurecollection.ipynb new file mode 100644 index 0000000..1f7a699 --- /dev/null +++ b/docs/usage/plot/plot-featurecollection.ipynb @@ -0,0 +1,449 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plot `FeatureCollection`\n", + "\n", + "The `geetools` extension contains a set of functions for rendering charts from `ee.FeatureCollection` objects. The choice of function determines the arrangement of data in the chart, i.e., what defines x- and y-axis values and what defines the series. Use the following function descriptions and examples to determine the best function and chart type for your purpose." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geetools/blob/main/docs/example/plot_featureCollection.ipynb)\n", + "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee-community/geetools/blob/main/docs/example/plot_featureCollection.ipynb)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import ee, pytest_gee, os\n", + "\n", + "if \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", + "elif \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + " pytest_gee.init_ee_from_service_account()\n", + "else:\n", + " raise ValueError(\"Cannot authenticate with Earth Engine.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set up environment\n", + "\n", + "Install all the required libs if necessary and perform the import statements upstream." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment if installation of libs is necessary\n", + "# !pip install earthengine-api geetools" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt\n", + "\n", + "import ee\n", + "import geetools #noqa: F401" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment if authetication to GEE is needed\n", + "# ee.Authenticate()\n", + "# ee.Intialize(project=\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example data\n", + "\n", + "The following examples rely on a FeatureCollection composed of three ecoregion features with properties that describe climate normals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Import the example feature collection.\n", + "ecoregions = ee.FeatureCollection('projects/google/charts_feature_example')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ee.FeatureCollection.geetools.plot_by_features\n", + "\n", + "### Column chart\n", + "\n", + "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by adjacent columns defined by a list of property names whose values are plotted along the y-axis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize the plot with the ecoregions data\n", + "ecoregions.geetools.plot_by_features(\n", + " type = \"bar\",\n", + " featureId = \"label\",\n", + " properties = ['01_tmean', '02_tmean', '03_tmean', '04_tmean', '05_tmean', '06_tmean', '07_tmean', '08_tmean', '09_tmean', '10_tmean', '11_tmean', '12_tmean'],\n", + " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", + " colors = ['#604791', '#1d6b99', '#39a8a7', '#0f8755', '#76b349', '#f0af07', '#e37d05', '#cf513e', '#96356f', '#724173', '#9c4f97', '#696969'],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Average Monthly Temperature by Ecoregion\")\n", + "ax.set_xlabel(\"Ecoregion\")\n", + "ax.set_ylabel(\"Temperature (°C)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Stacked column chart\n", + "\n", + "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by stacked columns defined by a list of property names whose values are plotted along the y-axis as the cumulative series sum." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize theplot with the ecoregions data\n", + "ecoregions.geetools.plot_by_features(\n", + " type = \"stacked\",\n", + " featureId = \"label\",\n", + " properties = ['01_ppt', '02_ppt', '03_ppt', '04_ppt', '05_ppt', '06_ppt', '07_ppt', '08_ppt', '09_ppt', '10_ppt', '11_ppt', '12_ppt'],\n", + " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", + " colors = ['#604791', '#1d6b99', '#39a8a7', '#0f8755', '#76b349', '#f0af07', '#e37d05', '#cf513e', '#96356f', '#724173', '#9c4f97', '#696969'],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", + "ax.set_xlabel(\"Ecoregion\")\n", + "ax.set_ylabel(\"Precipitation (mm)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{admonition} API\n", + "- {py:meth}`plot_by_features `: \n", + " {docstring}`geetools.FeatureCollectionAccessor.plot_by_features\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scatter chart\n", + "\n", + "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by points defined by a list of property names whose values are plotted along the y-axis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize theplot with the ecoregions data\n", + "ecoregions.geetools.plot_by_features(\n", + " type = \"scatter\",\n", + " featureId = \"label\",\n", + " properties = ['01_ppt', '06_ppt', '09_ppt'],\n", + " labels = [\"jan\", \"jun\", \"sep\"],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", + "ax.set_xlabel(\"Ecoregion\")\n", + "ax.set_ylabel(\"Precipitation (mm)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pie chart\n", + "\n", + "The pie is a property, each slice is the share from each feature whose value is cast as a percentage of the sum of all values of features composing the pie." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize theplot with the ecoregions data\n", + "ecoregions.geetools.plot_by_features(\n", + " type = \"pie\",\n", + " featureId = \"label\",\n", + " properties = ['06_ppt'],\n", + " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Share of precipitation in June by Ecoregion\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Donut chart\n", + "\n", + "The donut is a property, each slice is the share from each feature whose value is cast as a percentage of the sum of all values of features composing the donut." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize theplot with the ecoregions data\n", + "ecoregions.geetools.plot_by_features(\n", + " type = \"donut\",\n", + " featureId = \"label\",\n", + " properties = ['07_ppt'],\n", + " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Share of precipitation in July by Ecoregion\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ee.FeatureCollection.geetools.plot_by_properties\n", + "\n", + "## Column chart\n", + "\n", + "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by columns, labeled by values of a selected property." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "\n", + "# initialize theplot with the ecoregions data\n", + "ax = ecoregions.geetools.plot_by_properties(\n", + " type = \"bar\",\n", + " properties = ['01_ppt', '02_ppt', '03_ppt', '04_ppt', '05_ppt', '06_ppt', '07_ppt', '08_ppt', '09_ppt', '10_ppt', '11_ppt', '12_ppt'],\n", + " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", + " featureId = \"label\",\n", + " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", + "ax.set_xlabel(\"Month\")\n", + "ax.set_ylabel(\"Precipitation (mm)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Line chart\n", + "\n", + "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by columns, labeled by values of a selected property." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize theplot with the ecoregions data\n", + "ax = ecoregions.geetools.plot_by_properties(\n", + " type = \"plot\",\n", + " properties = [\"01_ppt\", \"02_ppt\", \"03_ppt\", \"04_ppt\", \"05_ppt\", \"06_ppt\", \"07_ppt\", \"08_ppt\", \"09_ppt\", \"10_ppt\", \"11_ppt\", \"12_ppt\"],\n", + " featureId = \"label\",\n", + " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", + " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", + "ax.set_xlabel(\"Month\")\n", + "ax.set_ylabel(\"Precipitation (mm)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Area chart \n", + "\n", + "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by lines and shaded areas, labeled by values of a selected property." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# initialize the plot with the ecoregions data\n", + "ax = ecoregions.geetools.plot_by_properties(\n", + " type = \"fill_between\",\n", + " properties = [\"01_ppt\", \"02_ppt\", \"03_ppt\", \"04_ppt\", \"05_ppt\", \"06_ppt\", \"07_ppt\", \"08_ppt\", \"09_ppt\", \"10_ppt\", \"11_ppt\", \"12_ppt\"],\n", + " labels = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"],\n", + " featureId = \"label\",\n", + " colors = [\"#f0af07\", \"#0f8755\", \"#76b349\"],\n", + " ax = ax\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"Average Monthly Precipitation by Ecoregion\")\n", + "ax.set_xlabel(\"Month\")\n", + "ax.set_ylabel(\"Precipitation (mm)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ee.FeatureCollection.geetools.plot_hist\n", + "\n", + "The x-axis is defined by value bins for the range of values of a selected property; the y-axis is the number of elements in the given bin." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "# load some data\n", + "normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands()\n", + "\n", + "# Make a point sample of climate variables for a region in western USA.\n", + "region = ee.Geometry.Rectangle(-123.41, 40.43, -116.38, 45.14)\n", + "climSamp = normClim.sample(region, 5000)\n", + "\n", + "\n", + "# initialize the plot with the ecoregions data\n", + "ax = climSamp.geetools.plot_hist(\n", + " property = \"07_ppt\",\n", + " label = \"July Precipitation (mm)\",\n", + " color = '#1d6b99',\n", + " ax = ax,\n", + " bins = 30\n", + ")\n", + "\n", + "# once created the axes can be modified as needed using pure matplotlib functions\n", + "ax.set_title(\"July Precipitation Distribution for NW USA\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/usage/plot/plot-image.ipynb b/docs/usage/plot/plot-image.ipynb new file mode 100644 index 0000000..39c8977 --- /dev/null +++ b/docs/usage/plot/plot-image.ipynb @@ -0,0 +1,27 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Map `Image`\n", + "\n", + "```{warning}\n", + "This notebook is a work in progress. It is not yet functional.\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/usage/plot/plot-imagecollection.ipynb b/docs/usage/plot/plot-imagecollection.ipynb new file mode 100644 index 0000000..9fdd18c --- /dev/null +++ b/docs/usage/plot/plot-imagecollection.ipynb @@ -0,0 +1,27 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plot `ee.ImageCollection`\n", + "\n", + "```{warning}\n", + "This notebook is a work in progress. It is not yet functional.\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/example/template.ipynb b/docs/usage/template.ipynb similarity index 100% rename from docs/example/template.ipynb rename to docs/usage/template.ipynb diff --git a/pyproject.toml b/pyproject.toml index dbe3d73..6d9815e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,6 +77,7 @@ doc = [ "httplib2", "jupyter-sphinx", "myst-nb", + "pytest-gee", ] [tool.hatch.build.targets.wheel] From 1b3b094f1b6556080ce7839b096c0e707b399a13 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Wed, 9 Oct 2024 19:23:47 +0000 Subject: [PATCH 03/12] docs: document plotting functions --- docs/_extension/api_admonition.py | 74 ++++++ docs/_static/custom.css | 4 + docs/conf.py | 4 +- docs/index.rst | 6 +- docs/usage/plot/index.rst | 1 - docs/usage/plot/map-featurecollection.ipynb | 205 +++++++++++++- docs/usage/plot/map-image.ipynb | 266 ++++++++++++++++++- docs/usage/plot/plot-featurecollection.ipynb | 33 ++- docs/usage/plot/plot-image.ipynb | 2 +- docs/usage/plot/plot-imagecollection.ipynb | 2 +- geetools/Image.py | 5 +- pyproject.toml | 1 + 12 files changed, 572 insertions(+), 31 deletions(-) create mode 100644 docs/_extension/api_admonition.py diff --git a/docs/_extension/api_admonition.py b/docs/_extension/api_admonition.py new file mode 100644 index 0000000..4b6c69d --- /dev/null +++ b/docs/_extension/api_admonition.py @@ -0,0 +1,74 @@ +"""A directive to generate an API admonition.""" + +from typing import Any, Dict + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst.directives.admonitions import BaseAdmonition +from sphinx.application import Sphinx +from sphinx.util import logging +from sphinx.util.docutils import SphinxDirective +from sphinx.writers.html5 import HTML5Translator + +logger = logging.getLogger(__name__) + + +class api_node(nodes.Admonition, nodes.Element): + pass + + +def visit_api_node(self: HTML5Translator, node: api_node) -> None: + self.visit_admonition(node) + + +def depart_api_node(self: HTML5Translator, node: api_node) -> None: + self.depart_admonition(node) + + +class APIAdmonitionDirective(BaseAdmonition, SphinxDirective): + """An API entry, displayed (if configured) in the form of an admonition.""" + + node_class = api_node + has_content = True + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = False + option_spec = { + "class": directives.class_option, + "name": directives.unchanged, + } + + def run(self) -> list[nodes.Node]: + if not self.options.get("class"): + self.options["class"] = ["admonition-api"] + + (api,) = super().run() + if isinstance(api, nodes.system_message): + return [api] + elif isinstance(api, api_node): + api.insert(0, nodes.title(text="See API")) + api["docname"] = self.env.docname + self.add_name(api) + self.set_source_info(api) + self.state.document.note_explicit_target(api) + return [api] + else: + raise RuntimeError # never reached here + + +def setup(app: Sphinx) -> Dict[str, Any]: + """Add custom configuration to sphinx app. + + Args: + app: the Sphinx application + + Returns: + the 2 parallel parameters set to ``True``. + """ + app.add_directive("api", APIAdmonitionDirective) + app.add_node(api_node, html=(visit_api_node, depart_api_node)) + + return { + "parallel_read_safe": True, + "parallel_write_safe": True, + } diff --git a/docs/_static/custom.css b/docs/_static/custom.css index 0af9db6..0776444 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -4,3 +4,7 @@ div.highlight-console pre span.go::before { margin-right: 10px; margin-left: 5px; } + +div.admonition.admonition-api > .admonition-title::after { + content: "\f121"; /* the fa-code icon */ +} diff --git a/docs/conf.py b/docs/conf.py index e664177..c4d400b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -28,12 +28,14 @@ "sphinx.ext.viewcode", "sphinx.ext.intersphinx", "sphinx.ext.autosectionlabel", + "sphinxcontrib.icon", "sphinx_design", "sphinx_copybutton", "autoapi.extension", "jupyter_sphinx", "myst_nb", "_extension.docstring", + "_extension.api_admonition", ] exclude_patterns = ["**.ipynb_checkpoints"] @@ -123,7 +125,7 @@ autosectionlabel_prefix_document = True # -- options for myst-nb ------------------------------------------------------ -# nb_execution_mode = "off" +nb_execution_mode = "force" # -- Script to authenticate to Earthengine using a token ----------------------- def gee_configure() -> None: diff --git a/docs/index.rst b/docs/index.rst index b0b3359..733570e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -32,10 +32,10 @@ content .. grid-item:: - .. card:: Usage - :link: usage/install.html + .. card:: :icon:`fa-solid fa-chart-simple` plot + :link: usage/plot/index.html - Usage and installation + Extension methods to display EE objects directly as matplotlib plots. .. grid-item:: diff --git a/docs/usage/plot/index.rst b/docs/usage/plot/index.rst index b32417d..e55d787 100644 --- a/docs/usage/plot/index.rst +++ b/docs/usage/plot/index.rst @@ -4,7 +4,6 @@ Plotting We embed some plotting capabilities in the library to help you visualize your data. .. toctree:: - :hidden: plot-featurecollection plot-image diff --git a/docs/usage/plot/map-featurecollection.ipynb b/docs/usage/plot/map-featurecollection.ipynb index 2138c2a..79f964e 100644 --- a/docs/usage/plot/map-featurecollection.ipynb +++ b/docs/usage/plot/map-featurecollection.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Map `FeatureCollection`\n", + "# Map FeatureCollection\n", "\n", "The `geetools` extension contains a set of functions for rendering maps from `ee.FeatureCollection` objects. Use the following function descriptions and examples to determine the best function and chart type for your purpose." ] @@ -29,15 +29,200 @@ " raise ValueError(\"Cannot authenticate with Earth Engine.\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geetools/blob/main/docs/usage/map-featurecollection.ipynb)\n", + "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee-community/geetools/blob/main/docs/usage/map-featurecollection.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set up environment\n", + "\n", + "Install all the required packages and perform the import statement upstream." + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ + "# uncomment if installation of libs is necessary\n", + "# !pip install earthengine-api geetools" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import display\n", + "from matplotlib import pyplot as plt\n", + "\n", "import ee\n", + "import geetools #noqa: F401" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment if authetication to GEE is needed\n", + "# ee.Authenticate()\n", + "# ee.Intialize(project=\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example data \n", "\n", - "ee.Number(1).getInfo()" + "The following examples rely on a `ee.FeatureCollection` composed of all the hydroshed bassins from south america." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "region = ee.Geometry.BBox(-80, -60, -20, 20);\n", + "fc = ee.FeatureCollection('WWF/HydroATLAS/v1/Basins/level04').filterBounds(region)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Map Vector\n", + "\n", + "```{api}\n", + "{py:meth}`plot `: \n", + " {docstring}`geetools.FeatureCollectionAccessor.plot`\n", + "```\n", + "\n", + "An `ee.FeatureCollection` is a vector representation of geographical properties. A user can be interested by either the property evolution across the landscape or the geometries associated with it. The {py:meth}`plot ` is coverinig both use cases. \n", + "\n", + "### Map a property\n", + "\n", + "A single property can be ploted on a map using matplotlib. The following example is showing the bassin area in km².\n", + "\n", + "First create a matplotlib figure and axis:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.ioff() # remove interactive for the sake of the example\n", + "fig, ax = plt.subplots()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then you can add the bassins to the map using the `plot` method. By default it will display the first property of the features. In our case we will opt to display the area of the bassins in km² i.e. the \"UP_AREA\" property." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fc.geetools.plot(ax=ax, property=\"UP_AREA\", cmap=\"viridis\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have the plot, we can customize it with matplotlib. For example, we can add a title and a colorbar." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# you can then customize the figure as you would for any other matplotlib object\n", + "fig.colorbar(ax.collections[0], label=\"Upstream area (km²)\")\n", + "ax.set_title(\"HydroATLAS basins of level4\")\n", + "ax.set_xlabel(\"Longitude (°)\")\n", + "ax.set_ylabel(\"Latitude (°)\")\n", + "\n", + "display(fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Map geometries\n", + "\n", + "Alternatively if you only want to plot the geometries of the featurecollection on a map, you can use the `plot` method with the `boundares` parameter set to `True`.\n", + "\n", + "Similarly to the previous example we start by creating a pyplot figure and axis:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.ioff() # remove interactive for the sake of the example\n", + "fig, ax = plt.subplots()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then you can start plotting the geometries:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fc.geetools.plot(ax=ax, boundaries=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and finally customize the plot:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# you can then customize the figure as you would for any other matplotlib object\n", + "ax.set_title(\"Borders of the HydroATLAS basins of level4\")\n", + "ax.set_xlabel(\"Longitude (°)\")\n", + "ax.set_ylabel(\"Latitude (°)\")\n", + "\n", + "display(fig)" ] }, { @@ -49,8 +234,22 @@ } ], "metadata": { + "kernelspec": { + "display_name": "geetools", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/usage/plot/map-image.ipynb b/docs/usage/plot/map-image.ipynb index c327c6c..9c030fb 100644 --- a/docs/usage/plot/map-image.ipynb +++ b/docs/usage/plot/map-image.ipynb @@ -4,11 +4,253 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Map `Image`\n", + "# Map Image\n", "\n", - "```{warning}\n", - "This notebook is a work in progress. It is not yet functional.\n", - "```" + "The `geetools` extension contains a set of functions for rendering maps from `ee.Image` objects. Use the following function descriptions and examples to determine the best function and chart type for your purpose." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import ee, pytest_gee, os\n", + "\n", + "if \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", + "elif \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + " pytest_gee.init_ee_from_service_account()\n", + "else:\n", + " raise ValueError(\"Cannot authenticate with Earth Engine.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geetools/blob/main/docs/usage/map-image.ipynb)\n", + "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee-community/geetools/blob/main/docs/usage/map-image.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set up environment\n", + "\n", + "Install the required packages and authenticate your Earth Engine account." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment if installation of libs is necessary\n", + "# !pip install earthengine-api geetools" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import display\n", + "from matplotlib import pyplot as plt\n", + "\n", + "import ee\n", + "import geetools #noqa: F401" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# uncomment if authetication to GEE is needed\n", + "# ee.Authenticate()\n", + "# ee.Intialize(project=\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example data \n", + "\n", + "The following examples rely on the \"COPERNICUS/S2_HARMONIZED\" `ee.ImageCollection` filtered between 2022-06-01 and 2022-06-30. We then build the NDVI spectral indice and use mosaic to get an `ee.Image` object. This object is clipped over the Vatican city as it's one of the smallest country in the world." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# load the vatican\n", + "level0 = ee.FeatureCollection(\"FAO/GAUL/2015/level0\")\n", + "vatican = level0.filter(ee.Filter.eq(\"ADM0_NAME\", \"Holy See\"))\n", + "\n", + "# pre-process the imagecollection and mosaic the month of June 2022\n", + "image = (\n", + " ee.ImageCollection('COPERNICUS/S2_HARMONIZED')\n", + " .filterDate('2022-06-01', '2022-06-30')\n", + " .filterBounds(vatican)\n", + " .geetools.maskClouds()\n", + " .geetools.spectralIndices(\"NDVI\")\n", + " .mosaic()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Map Raster\n", + "\n", + "```{api}\n", + "{py:meth}`plot `: \n", + " {docstring}`geetools.ImageAccessor.plot`\n", + "```\n", + "\n", + "An `ee.image` is a raster representation of the Earth's surface. The `plot` function allows you to visualize the raster data on a map. The function provides options to customize the visualization, such as the color palette, opacity, and the visualization range.\n", + "\n", + "### Map pseudo color\n", + "\n", + "A pseudo-color image is a single-band raster image that uses a color palette to represent the data. The following example demonstrates how to plot the NDVI pseudo-color image using the `plot` function.\n", + "\n", + "First create a matplotlib figure and axis: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.ioff() # remove interactive for the sake of the example\n", + "fig, ax = plt.subplots()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then you can add the map to the axis. Provide a single element list in the bands parameter to plot the NDVI image. \n", + "As per interactive representation an image needs to be reduced to a region, here \"Vatican City\". In this example we also select a pseudo-mercator projection and we displayed the `ee.FeatureCollection` on top of it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image.geetools.plot(\n", + " bands = [\"NDVI\"],\n", + " ax=ax,\n", + " region=vatican.geometry(),\n", + " crs=\"EPSG:3857\",\n", + " scale=10,\n", + " fc=vatican,\n", + " cmap=\"viridis\",\n", + " color=\"k\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have the plot, we can customize it with matplotlib. For example, we can add a title and a colorbar." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# as it's a figure you can then edit the information as you see fit\n", + "ax.set_title(\"NDVI in Vatican City\")\n", + "ax.set_xlabel(\"x coordinates (m)\")\n", + "ax.set_ylabel(\"y coordinates (m)\")\n", + "fig.colorbar(ax.images[0], label=\"NDVI\")\n", + "\n", + "display(fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Map RGB combo\n", + "\n", + "An RGB image is a three-band raster image that uses the red, green, and blue bands to represent the data. The following example demonstrates how to plot the RGB image using the `plot` function.\n", + "\n", + "First create a matplotlib figure and axis: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.ioff() # remove interactive for the sake of the example\n", + "fig, ax = plt.subplots()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then you can add the map to the axis. Provide a 3 elements list in the bands parameter to plot the NDVI image. \n", + "As per interactive representation an image needs to be reduced to a region, here \"Vatican City\". In this example we displayed the `ee.FeatureCollection` on top of it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image.geetools.plot(\n", + " bands = [\"B4\", \"B3\", \"B2\"],\n", + " ax=ax,\n", + " region=vatican.geometry(),\n", + " fc=vatican,\n", + " color=\"k\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and finally customize the plot:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# as it's a figure you can then edit the information as you see fit\n", + "ax.set_title(\"Sentinel 2 composite in Vatican City\")\n", + "ax.set_xlabel(\"longitude (°)\")\n", + "ax.set_ylabel(\"latitude (°)\")\n", + "\n", + "display(fig)" ] }, { @@ -18,8 +260,22 @@ } ], "metadata": { + "kernelspec": { + "display_name": "geetools", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/usage/plot/plot-featurecollection.ipynb b/docs/usage/plot/plot-featurecollection.ipynb index 1f7a699..3ea5a0b 100644 --- a/docs/usage/plot/plot-featurecollection.ipynb +++ b/docs/usage/plot/plot-featurecollection.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Plot `FeatureCollection`\n", + "# Plot FeatureCollection\n", "\n", "The `geetools` extension contains a set of functions for rendering charts from `ee.FeatureCollection` objects. The choice of function determines the arrangement of data in the chart, i.e., what defines x- and y-axis values and what defines the series. Use the following function descriptions and examples to determine the best function and chart type for your purpose." ] @@ -13,8 +13,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geetools/blob/main/docs/example/plot_featureCollection.ipynb)\n", - "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee-community/geetools/blob/main/docs/example/plot_featureCollection.ipynb)" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geetools/blob/main/docs/usage/plot-featurecollection.ipynb)\n", + "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee-community/geetools/blob/main/docs/usage/plot-featurecollection.ipynb)" ] }, { @@ -104,6 +104,11 @@ "source": [ "## ee.FeatureCollection.geetools.plot_by_features\n", "\n", + "```{api}\n", + "{py:meth}`plot_by_features `: \n", + " {docstring}`geetools.FeatureCollectionAccessor.plot_by_features`\n", + "```\n", + "\n", "### Column chart\n", "\n", "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by adjacent columns defined by a list of property names whose values are plotted along the y-axis." @@ -168,16 +173,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```{admonition} API\n", - "- {py:meth}`plot_by_features `: \n", - " {docstring}`geetools.FeatureCollectionAccessor.plot_by_features\n", - "```" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -279,6 +274,11 @@ "source": [ "## ee.FeatureCollection.geetools.plot_by_properties\n", "\n", + "```{api}\n", + "{py:meth}`plot_by_properties `: \n", + " {docstring}`geetools.FeatureCollectionAccessor.plot_by_properties`\n", + "```\n", + "\n", "## Column chart\n", "\n", "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by columns, labeled by values of a selected property." @@ -384,6 +384,11 @@ "source": [ "## ee.FeatureCollection.geetools.plot_hist\n", "\n", + "```{api}\n", + "{py:meth}`plot_hist `: \n", + " {docstring}`geetools.FeatureCollectionAccessor.plot_hist`\n", + "```\n", + "\n", "The x-axis is defined by value bins for the range of values of a selected property; the y-axis is the number of elements in the given bin." ] }, @@ -396,7 +401,7 @@ "fig, ax = plt.subplots()\n", "\n", "# load some data\n", - "normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands()\n", + "normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm91m').toBands()\n", "\n", "# Make a point sample of climate variables for a region in western USA.\n", "region = ee.Geometry.Rectangle(-123.41, 40.43, -116.38, 45.14)\n", diff --git a/docs/usage/plot/plot-image.ipynb b/docs/usage/plot/plot-image.ipynb index 39c8977..a8032e0 100644 --- a/docs/usage/plot/plot-image.ipynb +++ b/docs/usage/plot/plot-image.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Map `Image`\n", + "# Plot Image\n", "\n", "```{warning}\n", "This notebook is a work in progress. It is not yet functional.\n", diff --git a/docs/usage/plot/plot-imagecollection.ipynb b/docs/usage/plot/plot-imagecollection.ipynb index 9fdd18c..7e7326f 100644 --- a/docs/usage/plot/plot-imagecollection.ipynb +++ b/docs/usage/plot/plot-imagecollection.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Plot `ee.ImageCollection`\n", + "# Plot ee.ImageCollection\n", "\n", "```{warning}\n", "This notebook is a work in progress. It is not yet functional.\n", diff --git a/geetools/Image.py b/geetools/Image.py index 97a5566..8ab03c4 100644 --- a/geetools/Image.py +++ b/geetools/Image.py @@ -1365,6 +1365,7 @@ def plot( cmap: str = "viridis", crs: str = "EPSG:4326", scale: float = 0.0001, # 0.0001 is the default scale for Sentinel-2 + color="k", ): """Plot the image on a matplotlib axis. @@ -1376,6 +1377,7 @@ def plot( cmap: The colormap to use for the image. Default is 'viridis'. can only ber used for single band images. crs: The coordinate reference system of the image. scale: The scale of the image. + color: The color of the overlaid feature collection. Default is "k" (black). Examples: .. code-block:: python @@ -1414,7 +1416,6 @@ def plot( # and normalized them if len(bands) == 1: ax.imshow(bands_da[0], extent=[min_x, max_x, min_y, max_y], cmap=cmap) - print(bands_da[0].shape) else: da = np.dstack(bands_da) rgb_image = (da - np.min(da)) / (np.max(da) - np.min(da)) @@ -1425,4 +1426,4 @@ def plot( if fc is not None: gdf = gpd.GeoDataFrame.from_features(fc.getInfo()["features"]) gdf = gdf.set_crs("EPSG:4326").to_crs(crs) - gdf.boundary.plot(ax=ax) + gdf.boundary.plot(ax=ax, color=color) diff --git a/pyproject.toml b/pyproject.toml index 6d9815e..d282e40 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,6 +78,7 @@ doc = [ "jupyter-sphinx", "myst-nb", "pytest-gee", + "sphinx-icon", ] [tool.hatch.build.targets.wheel] From 3dfd7d4f0992526c7799ca66eca0c0795f420a7d Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Fri, 11 Oct 2024 14:30:15 +0000 Subject: [PATCH 04/12] docs: documentation update --- docs/index.rst | 13 +- docs/usage/plot/plot-featurecollection.ipynb | 150 +++++++++++++++++-- geetools/FeatureCollection.py | 48 +++++- 3 files changed, 185 insertions(+), 26 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 733570e..5b9ab3f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -35,22 +35,15 @@ content .. card:: :icon:`fa-solid fa-chart-simple` plot :link: usage/plot/index.html - Extension methods to display EE objects directly as matplotlib plots. + Display EE objects directly as static plots. .. grid-item:: - .. card:: Contribute - :link: usage/contribute.html + .. card:: :icon:`fa-solid fa-handshake-angle` Contribute + :link: setup/contribute.html Help us improve the lib. - .. grid-item:: - - .. card:: API - :link: autoapi/index.html - - Discover the lib API. - Why using it ? -------------- diff --git a/docs/usage/plot/plot-featurecollection.ipynb b/docs/usage/plot/plot-featurecollection.ipynb index 3ea5a0b..7e571f9 100644 --- a/docs/usage/plot/plot-featurecollection.ipynb +++ b/docs/usage/plot/plot-featurecollection.ipynb @@ -102,13 +102,79 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ee.FeatureCollection.geetools.plot_by_features\n", + "## Plot by features\n", "\n", - "```{api}\n", - "{py:meth}`plot_by_features `: \n", - " {docstring}`geetools.FeatureCollectionAccessor.plot_by_features`\n", - "```\n", + "Features are plotted along the x-axis by values of a selected property. Series are defined by a list of property names whose values are plotted along the y-axis. The type of produced chart can be controlled by the `type` parameter as shown in the following examples.\n", "\n", + "If you want to use another plotting library you can get the raw data using the `byFeatures` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Data for the chart\n", + "features = ['f1', 'f2', 'f3']\n", + "p1_values = [0.5, 2.5, 4.5]\n", + "p2_values = [1.5, 3.5, 5.5]\n", + "p3_values = [2.5, 4.0, 6.5]\n", + "\n", + "# Set the width of the bars\n", + "bar_width = 0.25\n", + "index = np.arange(len(features))\n", + "offset = 0.005\n", + "\n", + "# Create the plot\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", + "\n", + "# Plotting the bars\n", + "rects1 = ax.bar(index, p1_values, bar_width, label='p1', color='#1d6b99')\n", + "rects2 = ax.bar(index + (bar_width + offset), p2_values, bar_width, label='p2', color='#cf513e')\n", + "rects3 = ax.bar(index + 2 * (bar_width + offset), p3_values, bar_width, label='p3', color='#f0af07')\n", + "\n", + "# Add labels, title, and custom x-axis tick labels\n", + "ax.set_xlabel('Features by property value')\n", + "ax.set_ylabel('Series property value')\n", + "ax.set_xticks(index + bar_width)\n", + "ax.set_xticklabels(features)\n", + "\n", + "# Add a legend\n", + "ax.legend(loc='upper center', bbox_to_anchor=(0.85, 1.15), ncol=3, title='Property names')\n", + "\n", + "# set the grid display\n", + "ax.grid(axis=\"y\")\n", + "ax.set_axisbelow(True)\n", + "ax.spines[\"top\"].set_visible(False)\n", + "ax.spines[\"right\"].set_visible(False)\n", + "\n", + "# Show the plot\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{api}\n", + "- {py:meth}`plot_by_features `: {docstring}`geetools.FeatureCollectionAccessor.plot_by_features`\n", + "- {py:meth}`byFeatures `: {docstring}`geetools.FeatureCollectionAccessor.byFeatures`\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "### Column chart\n", "\n", "Features are plotted along the x-axis, labeled by values of a selected property. Series are represented by adjacent columns defined by a list of property names whose values are plotted along the y-axis." @@ -272,13 +338,77 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ee.FeatureCollection.geetools.plot_by_properties\n", + "## Plot by properties\n", "\n", + "Feature properties are plotted along the x-axis by name; values of the given properties are plotted along the y-axis. Series are features labeled by values of a selected property. The type of produced chart can be controlled by the `type` parameter as shown in the following examples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Data for the chart\n", + "features = ['p1', 'p2', 'p3']\n", + "p1_values = [0.5, 2.5, 4.5]\n", + "p2_values = [1.5, 3.5, 5.5]\n", + "p3_values = [2.5, 4.0, 6.5]\n", + "\n", + "# Set the width of the bars\n", + "bar_width = 0.25\n", + "index = np.arange(len(features))\n", + "offset = 0.005\n", + "\n", + "# Create the plot\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", + "\n", + "# Plotting the bars\n", + "rects1 = ax.bar(index, p1_values, bar_width, label='f1', color='#1d6b99')\n", + "rects2 = ax.bar(index + (bar_width + offset), p2_values, bar_width, label='f2', color='#cf513e')\n", + "rects3 = ax.bar(index + 2 * (bar_width + offset), p3_values, bar_width, label='f3', color='#f0af07')\n", + "\n", + "# Add labels, title, and custom x-axis tick labels\n", + "ax.set_xlabel('Property names')\n", + "ax.set_ylabel('Series property value')\n", + "ax.set_xticks(index + bar_width)\n", + "ax.set_xticklabels(features)\n", + "\n", + "# Add a legend\n", + "ax.legend(loc='upper center', bbox_to_anchor=(0.85, 1.15), ncol=3, title='Features by property value')\n", + "\n", + "# set the grid display\n", + "ax.grid(axis=\"y\")\n", + "ax.set_axisbelow(True)\n", + "ax.spines[\"top\"].set_visible(False)\n", + "ax.spines[\"right\"].set_visible(False)\n", + "\n", + "# Show the plot\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "```{api}\n", "{py:meth}`plot_by_properties `: \n", " {docstring}`geetools.FeatureCollectionAccessor.plot_by_properties`\n", - "```\n", - "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "## Column chart\n", "\n", "Feature properties are plotted along the x-axis, labeled and sorted by a dictionary input; the values of the given properties are plotted along the y-axis. Series are features, represented by columns, labeled by values of a selected property." @@ -382,7 +512,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ee.FeatureCollection.geetools.plot_hist\n", + "## Plot hist\n", "\n", "```{api}\n", "{py:meth}`plot_hist `: \n", @@ -446,7 +576,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/geetools/FeatureCollection.py b/geetools/FeatureCollection.py index 4cf7d65..ceaeffd 100644 --- a/geetools/FeatureCollection.py +++ b/geetools/FeatureCollection.py @@ -152,6 +152,10 @@ def byProperties( Returns: A dictionary with all the properties as keys and their values in each feaure as a list. + See Also: + - :py:meth:`byFeatures `: :docstring:`geetools.FeatureCollectionAccessor.byFeatures` + - :py:meth:`plot_by_properties `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_properties` + Example: .. code-block:: python @@ -204,6 +208,10 @@ def byFeatures( Returns: A dictionary with all the feature ids as keys and their properties as a dictionary. + See Also: + - :py:meth:`byProperties `: :docstring:`geetools.FeatureCollectionAccessor.byProperties` + - :py:meth:`plot_by_features `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_features` + Examples: .. code-block:: python @@ -249,6 +257,9 @@ def plot_by_features( If no ``properties`` are provided, all properties will be plotted. If no ``featureId`` is provided, the "system:index" property will be used. + Warning: + This function is a client-side function. + Args: type: The type of plot to use. Defaults to "bar". can be any type of plot from the python lib `matplotlib.pyplot`. If the one you need is missing open an issue! featureId: The property to use as the x-axis (name the features). Defaults to "system:index". @@ -258,6 +269,12 @@ def plot_by_features( ax: The matplotlib axes to use. If not provided, the plot will be send to a new figure. kwargs: Additional arguments from the ``pyplot`` function. + See Also: + - :py:meth:`byFeatures `: :docstring:`geetools.FeatureCollectionAccessor.byFeatures` + - :py:meth:`plot_by_properties `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_properties` + - :py:meth:`plot_hist `: :docstring:`geetools.FeatureCollectionAccessor.plot_hist` + - :py:meth:`plot `: :docstring:`geetools.FeatureCollectionAccessor.plot` + Examples: .. code-block:: python @@ -265,9 +282,6 @@ def plot_by_features( fc = ee.FeatureCollection("FAO/GAUL/2015/level2").limit(10) fc.geetools.plot_by_features(properties=["ADM1_CODE", "ADM2_CODE"]) - - Note: - This function is a client-side function. """ # Get the features and properties props = ee.List(properties) if properties else self._obj.first().propertyNames().getInfo() @@ -294,6 +308,9 @@ def plot_by_properties( Each features will be represented by a color and each property will be a bar of the bar chart. + Warning: + This function is a client-side function. + Args: type: The type of plot to use. Defaults to "bar". can be any type of plot from the python lib `matplotlib.pyplot`. If the one you need is missing open an issue! featureId: The property to use as the y-axis (name the features). Defaults to "system:index". @@ -303,6 +320,12 @@ def plot_by_properties( ax: The matplotlib axes to use. If not provided, the plot will be send to a new figure. kwargs: Additional arguments from the ``pyplot`` function. + See Also: + - :py:meth:`byProperties `: :docstring:`geetools.FeatureCollectionAccessor.byProperties` + - :py:meth:`plot_by_features `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_features` + - :py:meth:`plot_hist `: :docstring:`geetools.FeatureCollectionAccessor.plot_hist` + - :py:meth:`plot `: :docstring:`geetools.FeatureCollectionAccessor.plot` + Examples: .. code-block:: python @@ -310,9 +333,6 @@ def plot_by_properties( fc = ee.FeatureCollection("FAO/GAUL/2015/level2").limit(10) fc.geetools.plot_by_properties(xProperties=["ADM1_CODE", "ADM2_CODE"]) - - Note: - This function is a client-side function. """ # Get the features and properties fc = self._obj @@ -331,6 +351,9 @@ def plot_hist( ) -> Axes: """Plot the histogram of a specific property. + Warning: + This function is a client-side function. + Args: property: The property to display label: The label to use for the property. If not provided, the property name will be used. @@ -338,6 +361,11 @@ def plot_hist( color: The color to use for the plot. If not provided, the default colors from the matplotlib library will be used. kwargs: Additional arguments from the ``pyplot.hist`` function. + See Also: + - :py:meth:`plot_by_features `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_features` + - :py:meth:`plot_by_properties `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_properties` + - :py:meth:`plot `: :docstring:`geetools.FeatureCollectionAccessor.plot` + Examples: .. code-block:: python @@ -520,6 +548,9 @@ def plot( ): """Plot the featureCollection on a map using the provided property. + Warning: + This function is a client-side function. + Parameters: property: The property to use to color the features. ax: The axes to plot the map on. @@ -528,6 +559,11 @@ def plot( boundaries: Whether to plot the features values or only the boundaries. color: The color to use for the boundaries. + See Also: + - :py:meth:`plot_by_features `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_features` + - :py:meth:`plot_by_properties `: :docstring:`geetools.FeatureCollectionAccessor.plot_by_properties` + - :py:meth:`plot_hist `: :docstring:`geetools.FeatureCollectionAccessor.plot_hist` + Examples: .. code-block:: python From 9251acb1317d520e2469e7e92e7cd752564ca010 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Fri, 11 Oct 2024 14:33:05 +0000 Subject: [PATCH 05/12] style: strip out nb outputs --- .../.ipynb_checkpoints/chart-checkpoint.ipynb | 64 +- .../map_visualization-checkpoint.ipynb | 4 +- notebooks/algorithms/brdf.ipynb | 113 +- notebooks/algorithms/distance_to_mask.ipynb | 53 +- notebooks/algorithms/euclidean_distance.ipynb | 277 +--- notebooks/algorithms/harmonize.ipynb | 49 +- notebooks/algorithms/mask_cover.ipynb | 93 +- notebooks/algorithms/pansharpen.ipynb | 73 +- .../exportByFeat-checkpoint.ipynb | 26 +- notebooks/batch/exportByFeat.ipynb | 26 +- notebooks/batch/exportToGCS.ipynb | 34 +- notebooks/bitreader/BitReader.ipynb | 261 +--- notebooks/cloud_mask/cloud_masking.ipynb | 158 +-- notebooks/collection/joinByProperty.ipynb | 25 +- notebooks/composite/closest_date.ipynb | 86 +- notebooks/composite/medoid.ipynb | 272 +--- notebooks/composite/medoid_score.ipynb | 35 +- notebooks/date/dayRangeIntervals.ipynb | 56 +- notebooks/date/since_epoch.ipynb | 73 +- .../getRegion-checkpoint.ipynb | 131 +- notebooks/geometry/getRegion.ipynb | 131 +- notebooks/image/addConstantBand.ipynb | 65 +- notebooks/image/addSuffix_addPrefix.ipynb | 111 +- notebooks/image/bufferMask.ipynb | 49 +- notebooks/image/clipToCollection.ipynb | 57 +- notebooks/image/distributions.ipynb | 194 +-- notebooks/image/parametrize.ipynb | 96 +- notebooks/image/removeBands.ipynb | 86 +- notebooks/image/renameDict.ipynb | 98 +- notebooks/image/renamePattern.ipynb | 117 +- notebooks/image/toGrid.ipynb | 112 +- notebooks/imagecollection/distributions.ipynb | 1117 ++--------------- notebooks/imagecollection/mosaicSameDay.ipynb | 133 +- .../imagecollection/parametrizeProperty.ipynb | 56 +- notebooks/visualization/stretching.ipynb | 45 +- 35 files changed, 714 insertions(+), 3662 deletions(-) diff --git a/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb index 8785997..8e7844f 100644 --- a/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb +++ b/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -103,7 +103,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -135,24 +135,9 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7a81b34e7c324831a3b8db3320387803", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HTML(value=u'\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
linear_functiongaussnormal_distribution
-0.2647060.1932770.0056910.499408
-0.0888900.4444420.0885830.567368
-0.0785140.4592660.1006730.570398
-0.0035320.5663830.2286790.588462
-0.0009020.5701400.2345800.588968
............
0.7979620.2886260.0185350.368387
0.8007280.2846740.0177170.366860
0.8373810.2323130.0094580.346635
0.8640230.1942530.0057670.331999
0.8790070.1728470.0042900.323809
\n", - "

97 rows × 3 columns

\n", - "" - ], - "text/plain": [ - " linear_function gauss normal_distribution\n", - "-0.264706 0.193277 0.005691 0.499408\n", - "-0.088890 0.444442 0.088583 0.567368\n", - "-0.078514 0.459266 0.100673 0.570398\n", - "-0.003532 0.566383 0.228679 0.588462\n", - "-0.000902 0.570140 0.234580 0.588968\n", - "... ... ... ...\n", - " 0.797962 0.288626 0.018535 0.368387\n", - " 0.800728 0.284674 0.017717 0.366860\n", - " 0.837381 0.232313 0.009458 0.346635\n", - " 0.864023 0.194253 0.005767 0.331999\n", - " 0.879007 0.172847 0.004290 0.323809\n", - "\n", - "[97 rows x 3 columns]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "charts.dataframe" ] diff --git a/notebooks/image/parametrize.ipynb b/notebooks/image/parametrize.ipynb index d1d2e32..ef3f1f0 100644 --- a/notebooks/image/parametrize.ipynb +++ b/notebooks/image/parametrize.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -56,45 +56,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4a4fcb2e36c14b71ba9304fced4b4791", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map(center=[0, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text'…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "62d80240ee174c809b53fa1399aff64a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Tab(children=(CustomInspector(children=(SelectMultiple(options=OrderedDict(), value=()), Accordion(selected_in…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Map.show()" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -110,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -119,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -135,20 +106,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'B1': 4712}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tools.image.getValue(i, i.geometry().centroid(), 10, 'client')" ] @@ -162,20 +122,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'B1': 0.4712}" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tools.image.getValue(parametrized, i.geometry().centroid(), 10, 'client')" ] @@ -189,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -207,20 +156,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'B1': 0.5287999999999999}" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tools.image.getValue(switch_parametrized, i.geometry().centroid(), 10, 'client')" ] diff --git a/notebooks/image/removeBands.ipynb b/notebooks/image/removeBands.ipynb index 52b9c88..7e2c126 100644 --- a/notebooks/image/removeBands.ipynb +++ b/notebooks/image/removeBands.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -39,24 +39,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2eb4faea0a494229bf0d825c9cd96929", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(i.bandNames())" ] @@ -70,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -79,24 +64,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2ffd0ef6ce544319a75ec0fe7bc477f4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(removed.bandNames())" ] @@ -110,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -119,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -133,28 +103,16 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n" - ] - } - ], + "outputs": [], "source": [ "print_bands(col)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -163,21 +121,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['B3', 'B4', 'B5', 'B6', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B3', 'B4', 'B5', 'B6', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B3', 'B4', 'B5', 'B6', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B3', 'B4', 'B5', 'B6', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B3', 'B4', 'B5', 'B6', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n" - ] - } - ], + "outputs": [], "source": [ "print_bands(removed_col)" ] diff --git a/notebooks/image/renameDict.ipynb b/notebooks/image/renameDict.ipynb index 8bf687c..b13e7c8 100644 --- a/notebooks/image/renameDict.ipynb +++ b/notebooks/image/renameDict.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -55,31 +55,16 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a74ad424f289459a9f4d372447a02ec4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "ui.eprint(bands)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -88,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -97,24 +82,9 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e62f7ef81e1043309a3b2087dd96302c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "ui.eprint(renamed_bands)" ] @@ -128,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -137,7 +107,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -151,28 +121,16 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print_bands(col)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -181,21 +139,9 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['B1', 'BLUE', 'GREEN', 'RED', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'BLUE', 'GREEN', 'RED', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'BLUE', 'GREEN', 'RED', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'BLUE', 'GREEN', 'RED', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n", - "['B1', 'BLUE', 'GREEN', 'RED', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B10', 'B11', 'B12', 'QA10', 'QA20', 'QA60']\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print_bands(renamed_col)" ] diff --git a/notebooks/image/renamePattern.ipynb b/notebooks/image/renamePattern.ipynb index 5b5711a..59f7f46 100644 --- a/notebooks/image/renamePattern.ipynb +++ b/notebooks/image/renamePattern.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -39,31 +39,16 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "65b82203da944225bc5e902b712211ae", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(test_i.bandNames())" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -81,31 +66,16 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "bdea2deda21f43e5b3e87eecead2a806", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(renamed.bandNames())" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -114,31 +84,16 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "5f1f7261c9044563a7437232ad4e16e6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(renamed2.bandNames())" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -147,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -156,31 +111,16 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "08b979ab506e46ada64f624f35b02e66", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(renamed3.bandNames())" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -189,7 +129,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -198,24 +138,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8d86b4e562b640298eb94b4553ac6342", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(renamed4.bandNames())" ] diff --git a/notebooks/image/toGrid.ipynb b/notebooks/image/toGrid.ipynb index e12e1f9..b9a5c33 100644 --- a/notebooks/image/toGrid.ipynb +++ b/notebooks/image/toGrid.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -77,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -93,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -102,45 +102,16 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "44076d6f0d3448dcbaa334606ecc0e39", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map(center=[0, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text'…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4b8355a1e42145808fca87017e6911e7", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Tab(children=(CustomInspector(children=(SelectMultiple(options=OrderedDict(), value=()), Accordion(selected_in…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Map.show()" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -149,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -158,55 +129,25 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "697c96b3c5044e2fb057d196c373f550", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "eprint(ee.Feature(grid.first()).geometry().projection())" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "cc87ac9deb894060a41047f3feeb3ae4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "eprint(i.select(0).projection())" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -215,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -224,24 +165,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "86659a916ba54a5da88bcbdfe9cf795c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "eprint(Map.getObject('reprojected'))" ] diff --git a/notebooks/imagecollection/distributions.ipynb b/notebooks/imagecollection/distributions.ipynb index 37585da..1fff0e0 100644 --- a/notebooks/imagecollection/distributions.ipynb +++ b/notebooks/imagecollection/distributions.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -64,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -99,52 +99,16 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function linearFunctionBand in module geetools.tools.imagecollection:\n", - "\n", - "linearFunctionBand(collection, band, range_min=None, range_max=None, mean=None, output_min=None, output_max=None, name='linear_function')\n", - " Apply a linear function over the bands across every image of the\n", - " ImageCollection using the following formula:\n", - " \n", - " - a = abs(val-mean)\n", - " - b = output_max-output_min\n", - " - c = abs(range_max-mean)\n", - " - d = abs(range_min-mean)\n", - " - e = max(c, d)\n", - " \n", - " f(x) = a*(-1)*(b/e)+output_max\n", - " \n", - " :param band: the band to process\n", - " :param range_min: the minimum pixel value in the parsed band. If None, it\n", - " will be computed reducing the collection\n", - " :param range_max: the maximum pixel value in the parsed band. If None, it\n", - " will be computed reducing the collection\n", - " :param output_min: the minimum value that will take the resulting band.\n", - " :param output_max: the minimum value that will take the resulting band.\n", - " :param mean: the value on the given range that will take the `output_max`\n", - " value\n", - " :param name: the name of the resulting band\n", - " :return: the parsed collection in which every image will have an extra band\n", - " that results of applying the linear function over every pixel in the\n", - " image\n", - " :rtype: ee.ImageCollection\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "help(tools.imagecollection.linearFunctionBand)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -153,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -162,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -171,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -180,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -189,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -198,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -207,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -216,24 +180,9 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "fa662784dc974130b4fcd60fbea58d8b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HTML(value='\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
defaultmean=10mean=10 min=0.5Exponential
-320.0666630.0094180.5000000.500000
-200.3472010.0925350.5419540.503594
-150.5515400.1914950.5919040.510812
-80.8442930.4244930.7095110.539220
-50.9360230.5515400.7736380.562733
01.0000000.7676180.8827040.623294
20.9894770.8442930.9214060.655646
40.9585690.9091850.9541610.692359
60.9091850.9585690.9790870.732741
80.8442930.9894770.9946890.775695
90.8071750.9973590.9986670.797684
100.7676181.0000001.0000000.819730
120.6832960.9894770.9946890.863029
140.5955040.9585690.9790870.903555
160.5081270.9091850.9541610.939209
180.4244930.8442930.9214060.968001
200.3472010.7676180.8827040.988236
230.2468420.6395810.8180771.000000
\n", - "" - ], - "text/plain": [ - " default mean=10 mean=10 min=0.5 Exponential\n", - "-32 0.066663 0.009418 0.500000 0.500000\n", - "-20 0.347201 0.092535 0.541954 0.503594\n", - "-15 0.551540 0.191495 0.591904 0.510812\n", - "-8 0.844293 0.424493 0.709511 0.539220\n", - "-5 0.936023 0.551540 0.773638 0.562733\n", - " 0 1.000000 0.767618 0.882704 0.623294\n", - " 2 0.989477 0.844293 0.921406 0.655646\n", - " 4 0.958569 0.909185 0.954161 0.692359\n", - " 6 0.909185 0.958569 0.979087 0.732741\n", - " 8 0.844293 0.989477 0.994689 0.775695\n", - " 9 0.807175 0.997359 0.998667 0.797684\n", - " 10 0.767618 1.000000 1.000000 0.819730\n", - " 12 0.683296 0.989477 0.994689 0.863029\n", - " 14 0.595504 0.958569 0.979087 0.903555\n", - " 16 0.508127 0.909185 0.954161 0.939209\n", - " 18 0.424493 0.844293 0.921406 0.968001\n", - " 20 0.347201 0.767618 0.882704 0.988236\n", - " 23 0.246842 0.639581 0.818077 1.000000" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "gauss_band_chart.dataframe" ] @@ -916,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -925,7 +435,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -934,7 +444,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -943,7 +453,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -952,7 +462,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -961,7 +471,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -970,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -979,199 +489,18 @@ }, { "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "de7f7e1a693b47e7b313497f070a483b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HTML(value='\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
defaultmean=10mean=10 min=0.5
-320.0666630.0094180.500000
-200.3472010.0925350.541954
-150.5515400.1914950.591904
-80.8442930.4244930.709511
-50.9360230.5515400.773638
01.0000000.7676180.882704
20.9894770.8442930.921406
40.9585690.9091850.954161
60.9091850.9585690.979087
80.8442930.9894770.994689
90.8071750.9973590.998667
100.7676181.0000001.000000
120.6832960.9894770.994689
140.5955040.9585690.979087
160.5081270.9091850.954161
180.4244930.8442930.921406
200.3472010.7676180.882704
230.2468420.6395810.818077
\n", - "" - ], - "text/plain": [ - " default mean=10 mean=10 min=0.5\n", - "-32 0.066663 0.009418 0.500000\n", - "-20 0.347201 0.092535 0.541954\n", - "-15 0.551540 0.191495 0.591904\n", - "-8 0.844293 0.424493 0.709511\n", - "-5 0.936023 0.551540 0.773638\n", - " 0 1.000000 0.767618 0.882704\n", - " 2 0.989477 0.844293 0.921406\n", - " 4 0.958569 0.909185 0.954161\n", - " 6 0.909185 0.958569 0.979087\n", - " 8 0.844293 0.989477 0.994689\n", - " 9 0.807175 0.997359 0.998667\n", - " 10 0.767618 1.000000 1.000000\n", - " 12 0.683296 0.989477 0.994689\n", - " 14 0.595504 0.958569 0.979087\n", - " 16 0.508127 0.909185 0.954161\n", - " 18 0.424493 0.844293 0.921406\n", - " 20 0.347201 0.767618 0.882704\n", - " 23 0.246842 0.639581 0.818077" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "gauss_prop.dataframe" ] @@ -1192,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1201,7 +530,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1210,161 +539,18 @@ }, { "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e7510d0fef7242ef8a04edeb7a177fb2", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HTML(value='\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
default
-320.001287
-200.007266
-150.012136
-80.020259
-50.023448
00.027123
20.027780
40.027901
60.027479
80.026538
90.025889
100.025133
120.023339
140.021253
160.018978
180.016618
200.014269
230.010943
\n", - "" - ], - "text/plain": [ - " default\n", - "-32 0.001287\n", - "-20 0.007266\n", - "-15 0.012136\n", - "-8 0.020259\n", - "-5 0.023448\n", - " 0 0.027123\n", - " 2 0.027780\n", - " 4 0.027901\n", - " 6 0.027479\n", - " 8 0.026538\n", - " 9 0.025889\n", - " 10 0.025133\n", - " 12 0.023339\n", - " 14 0.021253\n", - " 16 0.018978\n", - " 18 0.016618\n", - " 20 0.014269\n", - " 23 0.010943" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "normal_prop_chart.dataframe" ] @@ -1378,7 +564,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1387,7 +573,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1396,161 +582,18 @@ }, { "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "27290599ce564a86882052b318797197", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HTML(value='\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
default
-320.001287
-200.007266
-150.012136
-80.020259
-50.023448
00.027123
20.027780
40.027901
60.027479
80.026538
90.025889
100.025133
120.023339
140.021253
160.018978
180.016618
200.014269
230.010943
\n", - "" - ], - "text/plain": [ - " default\n", - "-32 0.001287\n", - "-20 0.007266\n", - "-15 0.012136\n", - "-8 0.020259\n", - "-5 0.023448\n", - " 0 0.027123\n", - " 2 0.027780\n", - " 4 0.027901\n", - " 6 0.027479\n", - " 8 0.026538\n", - " 9 0.025889\n", - " 10 0.025133\n", - " 12 0.023339\n", - " 14 0.021253\n", - " 16 0.018978\n", - " 18 0.016618\n", - " 20 0.014269\n", - " 23 0.010943" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "normal_band_chart.dataframe" ] diff --git a/notebooks/imagecollection/mosaicSameDay.ipynb b/notebooks/imagecollection/mosaicSameDay.ipynb index e327681..3fdb928 100644 --- a/notebooks/imagecollection/mosaicSameDay.ipynb +++ b/notebooks/imagecollection/mosaicSameDay.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -41,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -50,38 +50,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3a2da64b8c72434abeef4e1afff3388d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map(center=[0, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text'…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e26b3adfd3e54af18e60b8d07c92533e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Tab(children=(CustomInspector(children=(SelectMultiple(options=OrderedDict(), value=()), Accordion(selected_in…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Map = ui.Map()\n", "Map.show()" @@ -89,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -107,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -116,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -125,48 +96,18 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "82140caf91584f758b877eaf0b9c5f8e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(col.size())" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d428d9a800524fe6b53848ebb8e11f4b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Get dates\n", "def get_dates(col):\n", @@ -178,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -187,55 +128,25 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "0afcf5ad51ea46518f0675be1f4ec1fa", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(mosaics.size())" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6832d1e18cab4215bb1a61d49c5a5f0d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(get_dates(mosaics))" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -244,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -253,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/imagecollection/parametrizeProperty.ipynb b/notebooks/imagecollection/parametrizeProperty.ipynb index 775118a..c0da2e2 100644 --- a/notebooks/imagecollection/parametrizeProperty.ipynb +++ b/notebooks/imagecollection/parametrizeProperty.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -74,24 +74,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6b157c4a59af4add9821f051383170ce", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(cloud_cover)" ] @@ -105,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -123,24 +108,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "00814c1b15194170b6354a716c0c2e21", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(Accordion(children=(Button(description='Cancel', style=ButtonStyle()),), _titles={'0': 'Loading…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ui.eprint(out_of_range)" ] diff --git a/notebooks/visualization/stretching.ipynb b/notebooks/visualization/stretching.ipynb index 5fdf507..a894d80 100644 --- a/notebooks/visualization/stretching.ipynb +++ b/notebooks/visualization/stretching.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -22,38 +22,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2f5cf347fe6e41c090181568ebd023d0", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map(center=[0, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text'…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "487249a78a8d4d439846e046e63aa9c6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Tab(children=(CustomInspector(children=(SelectMultiple(options=OrderedDict(), value=()), Accordion(selected_in…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Map = ui.Map()\n", "Map.show()" @@ -68,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -85,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -110,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -128,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ From 842deaf42904b8cc006aedab808af372b1ab3cae Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Fri, 11 Oct 2024 14:39:16 +0000 Subject: [PATCH 06/12] docs: search for a service account before a token --- docs/conf.py | 6 +++--- docs/usage/plot/map-featurecollection.ipynb | 6 +++--- docs/usage/plot/map-image.ipynb | 6 +++--- docs/usage/plot/plot-featurecollection.ipynb | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index c4d400b..e24e0b8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -130,10 +130,10 @@ # -- Script to authenticate to Earthengine using a token ----------------------- def gee_configure() -> None: """Initialize earth engine according to the environment.""" - if "EARTHENGINE_PROJECT" in os.environ: - pytest_gee.init_ee_from_token() - elif "EARTHENGINE_SERVICE_ACCOUNT" in os.environ: + if "EARTHENGINE_SERVICE_ACCOUNT" in os.environ: pytest_gee.init_ee_from_service_account() + elif "EARTHENGINE_PROJECT" in os.environ: + pytest_gee.init_ee_from_token() else: raise ValueError("Cannot authenticate with Earth Engine.") diff --git a/docs/usage/plot/map-featurecollection.ipynb b/docs/usage/plot/map-featurecollection.ipynb index 79f964e..52e0ed8 100644 --- a/docs/usage/plot/map-featurecollection.ipynb +++ b/docs/usage/plot/map-featurecollection.ipynb @@ -21,10 +21,10 @@ "source": [ "import ee, pytest_gee, os\n", "\n", - "if \"EARTHENGINE_PROJECT\" in os.environ:\n", - " pytest_gee.init_ee_from_token()\n", - "elif \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + "if \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", " pytest_gee.init_ee_from_service_account()\n", + "elif \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", "else:\n", " raise ValueError(\"Cannot authenticate with Earth Engine.\")" ] diff --git a/docs/usage/plot/map-image.ipynb b/docs/usage/plot/map-image.ipynb index 9c030fb..4348963 100644 --- a/docs/usage/plot/map-image.ipynb +++ b/docs/usage/plot/map-image.ipynb @@ -21,10 +21,10 @@ "source": [ "import ee, pytest_gee, os\n", "\n", - "if \"EARTHENGINE_PROJECT\" in os.environ:\n", - " pytest_gee.init_ee_from_token()\n", - "elif \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + "if \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", " pytest_gee.init_ee_from_service_account()\n", + "elif \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", "else:\n", " raise ValueError(\"Cannot authenticate with Earth Engine.\")" ] diff --git a/docs/usage/plot/plot-featurecollection.ipynb b/docs/usage/plot/plot-featurecollection.ipynb index 7e571f9..4ac608f 100644 --- a/docs/usage/plot/plot-featurecollection.ipynb +++ b/docs/usage/plot/plot-featurecollection.ipynb @@ -29,10 +29,10 @@ "source": [ "import ee, pytest_gee, os\n", "\n", - "if \"EARTHENGINE_PROJECT\" in os.environ:\n", - " pytest_gee.init_ee_from_token()\n", - "elif \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + "if \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", " pytest_gee.init_ee_from_service_account()\n", + "elif \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", "else:\n", " raise ValueError(\"Cannot authenticate with Earth Engine.\")" ] From 25664eff9fadd60a331f18441999c7c3b4e3e479 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Tue, 15 Oct 2024 11:25:05 +0000 Subject: [PATCH 07/12] docs: build the plotting examples --- docs/usage/plot/map-featurecollection.ipynb | 11 ++++----- docs/usage/plot/plot-featurecollection.ipynb | 25 ++++++++++---------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/docs/usage/plot/map-featurecollection.ipynb b/docs/usage/plot/map-featurecollection.ipynb index 52e0ed8..5da1f16 100644 --- a/docs/usage/plot/map-featurecollection.ipynb +++ b/docs/usage/plot/map-featurecollection.ipynb @@ -106,8 +106,7 @@ "## Map Vector\n", "\n", "```{api}\n", - "{py:meth}`plot `: \n", - " {docstring}`geetools.FeatureCollectionAccessor.plot`\n", + "{py:meth}`plot `: {docstring}`geetools.FeatureCollectionAccessor.plot`\n", "```\n", "\n", "An `ee.FeatureCollection` is a vector representation of geographical properties. A user can be interested by either the property evolution across the landscape or the geometries associated with it. The {py:meth}`plot ` is coverinig both use cases. \n", @@ -126,7 +125,7 @@ "outputs": [], "source": [ "plt.ioff() # remove interactive for the sake of the example\n", - "fig, ax = plt.subplots()" + "fig, ax = plt.subplots(figsize=(10, 10))" ] }, { @@ -164,7 +163,7 @@ "ax.set_xlabel(\"Longitude (°)\")\n", "ax.set_ylabel(\"Latitude (°)\")\n", "\n", - "display(fig)" + "plt.show()" ] }, { @@ -185,7 +184,7 @@ "outputs": [], "source": [ "plt.ioff() # remove interactive for the sake of the example\n", - "fig, ax = plt.subplots()" + "fig, ax = plt.subplots(figsize=(10, 10))" ] }, { @@ -222,7 +221,7 @@ "ax.set_xlabel(\"Longitude (°)\")\n", "ax.set_ylabel(\"Latitude (°)\")\n", "\n", - "display(fig)" + "plt.show()" ] }, { diff --git a/docs/usage/plot/plot-featurecollection.ipynb b/docs/usage/plot/plot-featurecollection.ipynb index 4ac608f..bd61f7c 100644 --- a/docs/usage/plot/plot-featurecollection.ipynb +++ b/docs/usage/plot/plot-featurecollection.ipynb @@ -186,7 +186,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize the plot with the ecoregions data\n", "ecoregions.geetools.plot_by_features(\n", @@ -220,7 +220,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize theplot with the ecoregions data\n", "ecoregions.geetools.plot_by_features(\n", @@ -254,7 +254,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize theplot with the ecoregions data\n", "ecoregions.geetools.plot_by_features(\n", @@ -287,7 +287,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize theplot with the ecoregions data\n", "ecoregions.geetools.plot_by_features(\n", @@ -318,7 +318,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize theplot with the ecoregions data\n", "ecoregions.geetools.plot_by_features(\n", @@ -400,8 +400,8 @@ "metadata": {}, "source": [ "```{api}\n", - "{py:meth}`plot_by_properties `: \n", - " {docstring}`geetools.FeatureCollectionAccessor.plot_by_properties`\n", + "{py:meth}`plot_by_properties `: {docstring}`geetools.FeatureCollectionAccessor.plot_by_properties`\n", + "{py:meth}`byProperties `: {docstring}`geetools.FeatureCollectionAccessor.byProperties`\n", "```" ] }, @@ -420,7 +420,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "\n", "# initialize theplot with the ecoregions data\n", @@ -455,7 +455,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize theplot with the ecoregions data\n", "ax = ecoregions.geetools.plot_by_properties(\n", @@ -489,7 +489,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# initialize the plot with the ecoregions data\n", "ax = ecoregions.geetools.plot_by_properties(\n", @@ -515,8 +515,7 @@ "## Plot hist\n", "\n", "```{api}\n", - "{py:meth}`plot_hist `: \n", - " {docstring}`geetools.FeatureCollectionAccessor.plot_hist`\n", + "{py:meth}`plot_hist `: {docstring}`geetools.FeatureCollectionAccessor.plot_hist`\n", "```\n", "\n", "The x-axis is defined by value bins for the range of values of a selected property; the y-axis is the number of elements in the given bin." @@ -528,7 +527,7 @@ "metadata": {}, "outputs": [], "source": [ - "fig, ax = plt.subplots()\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", "\n", "# load some data\n", "normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm91m').toBands()\n", From 72bb62542ecfbf0601caacfc6a82ec4c6ace6201 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Wed, 16 Oct 2024 14:36:22 +0000 Subject: [PATCH 08/12] docs: add an Asset management example --- docs/index.rst | 7 + docs/usage/asset.ipynb | 500 ++++++++++++++++++++++++++++++++++++- docs/usage/asset/index.rst | 0 docs/usage/index.rst | 3 +- geetools/Asset.py | 12 + 5 files changed, 508 insertions(+), 14 deletions(-) delete mode 100644 docs/usage/asset/index.rst diff --git a/docs/index.rst b/docs/index.rst index 5b9ab3f..0754f11 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -37,6 +37,13 @@ content Display EE objects directly as static plots. + .. grid-item:: + + .. card:: :icon:`fa-solid fa-folder` asset + :link: usage/asset.html + + Manage your assets as a object-oriented file system. + .. grid-item:: .. card:: :icon:`fa-solid fa-handshake-angle` Contribute diff --git a/docs/usage/asset.ipynb b/docs/usage/asset.ipynb index 25f999c..c4ffa4f 100644 --- a/docs/usage/asset.ipynb +++ b/docs/usage/asset.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Manage Assets as ``Path`` objects" + "# Object-oriented asset file system" ] }, { @@ -61,7 +61,7 @@ "outputs": [], "source": [ "# uncomment if initialization is required\n", - "# ee.Initialize()" + "ee.Initialize(project=\"ee-geetools\")" ] }, { @@ -72,9 +72,38 @@ "\n", "In Google Earth Engine API, users are working with Assets. An asset is a filelike object that englobes a wide variety of types: IMAGE, IMAGE_COLLECTION, FOLDER, TABLE, FEATURE_COLLECTION, etc.\n", "\n", - "They are identified by a unique ID, which is a string that looks like this: `projects/username/assets/foo`. They can be modified using the `ee.data` module. This module has been proven complicated when dealing with basic file manipulation operation such as listing, moving, copying, etc.\n", + "They are identified by a unique ID, which is a string that looks like: `projects/username/assets/foo`. Using the vanila Earthengine API, They can be modified using the `ee.data` module. This module has been proven complicated when dealing with basic file manipulation operation such as listing, moving, copying, etc.\n", "\n", - "`geetools` provides a simple way to manage assets using the `Asset` object. This object is a subclass of the `pathlib.Path` object, which is a powerful way to manage file paths in Python. Most of the methods and properties are overwritten to work with the Google Earth Engine API." + "`geetools` provides a simple way to manage assets as an object-oriented filesystem paths using the `Asset` object. This object is a subclass of the `pathlib.Path` object, which is a powerful way to manage file paths in Python. Most of the methods and properties are overwritten to work with the Google Earth Engine context.\n", + "\n", + "`ee.Asset` objects implement the os.PathLike interface, allowing them to be used anywhere the interface is accepted." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic use\n", + "\n", + "Importing the main class:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ee, geetools" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create asset objects \n", + "\n", + "The Asset objects etend the pathlib.Path object and thus behave exactly the same when dealing with constructor. THe only differnece is that asset path only supports posix-like file separator: `/`." ] }, { @@ -83,15 +112,14 @@ "metadata": {}, "outputs": [], "source": [ - "# let's create a folder asset from the root folder\n", - "folder = ee.Asset(\"~/test_folder/subfolder\").expanduser()" + "ee.Asset(\"projects/ee-geetools/assets/documentation/image1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "then many operations can be performed on it" + "Each element of pathsegments can be either a string representing a path segment, or an object implementing the os.PathLike interface where the __fspath__() method returns a string, such as another path object." ] }, { @@ -100,8 +128,7 @@ "metadata": {}, "outputs": [], "source": [ - "# create the actual asset object\n", - "folder.mkdir(parents=True)" + "ee.Asset(\"projects\", \"ee-geetools\", \"assets\", \"documentation\", \"image1\")" ] }, { @@ -110,21 +137,468 @@ "metadata": {}, "outputs": [], "source": [ - "# see the parents of the asset\n", - "folder.parents" + "ee.Asset(\"projects/ee-geetools/assets/documentation\") / \"image1\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ee.Asset(\"projects/ee-geetools/assets/documentation\").joinpath(\"image1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To get more informations on the `Asset` object, it's properties and methods, you can refer to our [API documentation](https://geetools.readthedocs.io/en/latest/autoapi/geetools/Asset/index.html)." + "### Listing subdirectories" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# a public folder created for this docuemntation\n", + "folder = ee.Asset(\"projects/ee-geetools/assets/documentation\")\n", + "\n", + "# list all its direct subdirectories\n", + "[a for a in folder.iterdir() if a.is_folder()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{api}\n", + "- {py:meth}`iterdir `: {docstring}`geetools.Asset.iterdir`\n", + "- {py:meth}`is_folder `: {docstring}`geetools.Asset.is_folder`\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Listing Image in this folder" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[a for a in folder.iterdir() if a.is_image()]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "[a for a in folder.glob(\"**/image*\")]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{api}\n", + "- {py:meth}`iterdir `: {docstring}`geetools.Asset.iterdir`\n", + "- {py:meth}`glob `: {docstring}`geetools.Asset.glob`\n", + "- {py:meth}`is_image `: {docstring}`geetools.Asset.is_image`\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Querying asset properties" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "folder.exists()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fakeImage = folder / \"image6\"\n", + "fakeImage.exists()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{api}\n", + "- {py:meth}`exists `: {docstring}`geetools.Asset.exists`\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## General properties\n", + "\n", + "Paths are immutable and hashable. Paths of a same flavour are comparable and orderable. These properties respect the flavour’s case-folding semantics:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "folder = ee.Asset(\"projects/ee-geetools/assets/documentation\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "folder == ee.Asset(\"projects/ee-geetools/assets/DOCUMENTATION\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# related to https://github.com/gee-community/geetools/issues/331\n", + "# folder in { ee.Asset(\"projects/ee-geetools/assets/documentation\")}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The slash operator helps create child asset, like `os.path.join()`. If the argument is an absolute asset, the previous path is ignored." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ee.Asset(\"projects/ee-geetools/assets/documentation\") / \"image1\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An asset object can be used anywhere an object implementing `os.PathLike` is accepted." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "a = ee.Asset(\"projects/ee-geetools/assets/documentation\")\n", + "os.fspath(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The string representation of an asset is the asset id itself, which you can pass to any function taking an asset id as a string:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/image1\")\n", + "str(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Accessing individual parts\n", + "\n", + "To access the individual “parts” (components) of a path, use the following property:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/image1\")\n", + "a.parts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```{api}\n", + "- {py:meth}`parts `: {docstring}`geetools.Asset.parts`\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### access parent container\n", + "\n", + "Asset parent containers can be access either by the `parent` property or the `parents` property. Note This is a purely lexical operation and the parent is not checked to exist.\n", + "\n", + "```{api}\n", + "- {py:meth}`parent `: {docstring}`geetools.Asset.parent`\n", + "- {py:meth}`parents `: {docstring}`geetools.Asset.parents`\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "a.parent" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "a.parents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Name of the asset\n", + "\n", + "A string representing the final path component can be used to get the name of the asset.add\n", + "\n", + "```{api}\n", + "- {py:meth}`name `: {docstring}`geetools.Asset.name`\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "a.name" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## General Methods\n", + "\n", + "Pure paths provide the following methods." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### evaluate relation between assets\n", + "\n", + "It's possible to check if files are related between one another using the following methods:\n", + "\n", + "```{api}\n", + "- {py:meth}`is_relative_to `: {docstring}`geetools.Asset.is_relative_to`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "b = ee.Asset(\"projects/ee-geetools/assets/documentation\")\n", + "a.relative_to(b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### create a siblings\n", + "\n", + "One can create a siblings asset in the same container by using the `with_name()` method:\n", + "\n", + "```{api} \n", + "- {py:meth}`with_name `: {docstring}`geetools.Asset.with_name`\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "a.with_name(\"image2\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### resolve unix like symbols\n", + "\n", + "One can use some unix-like descriptors in it's Asset constructor parameters. If so before using the Asset object, it is necessary to resolve these symbols. The method `expanduser` does that.\n", + "\n", + "```{api}\n", + "- {py:meth}`expanduser `: {docstring}`geetools.Asset.expanduser`\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"~/documentation/subfolder1/image1\")\n", + "a.expanduser()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### check existence\n", + "\n", + "One can check if an asset exists using the `exists` method:\n", + "\n", + "```{api}\n", + "- {py:meth}`exists `: {docstring}`geetools.Asset.exists`\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "a.exists()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image10\")\n", + "a.exists()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Evaluate asset type\n", + "\n", + "As Earth Engine is not using any file extention to differentiate the asset type, one can use the `is_type` method with any of the following types: `IMAGE`, `IMAGE_COLLECTION`, `FOLDER`, `TABLE`, `FEATURE_COLLECTION`, `UNKNOWN`.\n", + "\n", + "```{api}\n", + "- {py:meth}`is_type `: {docstring}`geetools.Asset.is_type`\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", + "a.is_type(\"IMAGE\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All type checks are available in dedicated wrapped methods like `is_image`, `is_folder`, `is_table` ...etc." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a.is_image()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many other useful methods are available and are described in the {py:class}`API documentation `." ] } ], "metadata": { + "kernelspec": { + "display_name": "geetools", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/usage/asset/index.rst b/docs/usage/asset/index.rst deleted file mode 100644 index e69de29..0000000 diff --git a/docs/usage/index.rst b/docs/usage/index.rst index 69085e9..2505249 100644 --- a/docs/usage/index.rst +++ b/docs/usage/index.rst @@ -40,4 +40,5 @@ Then you can open a PR with the new file and it will be reviewed and merged. :hidden: template - plot/index \ No newline at end of file + plot/index + asset \ No newline at end of file diff --git a/geetools/Asset.py b/geetools/Asset.py index 2c3cd35..9da21e3 100644 --- a/geetools/Asset.py +++ b/geetools/Asset.py @@ -439,6 +439,10 @@ def iterdir(self, recursive: bool = False) -> list: Args: recursive: If True, get all the children recursively. Defaults to False. + See Also: + - :py:meth:`glob `: :docstring:`geetools.Asset.glob` + - :py:meth:`rglob `: :docstring:`geetools.Asset.rglob` + Examples: .. code-block:: python @@ -682,6 +686,10 @@ def glob(self, pattern: str) -> list: Args: pattern: The pattern to match with the asset name. + See Also: + - :py:meth:`iterdir `: :docstring:`geetools.Asset.iterdir` + - :py:meth:`glob `: :docstring:`geetools.Asset.rglob` + Examples: .. code-block:: python @@ -696,6 +704,10 @@ def rglob(self, pattern: str) -> list: Args: pattern: The pattern to match with the asset name. + See Also: + - :py:meth:`glob `: :docstring:`geetools.Asset.glob` + - :py:meth:`iterdir `: :docstring:`geetools.Asset.iterdir` + Examples: .. code-block:: python From 1a7b02b813bd4ac0e992db2e0e5c33195415b608 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Wed, 16 Oct 2024 16:27:25 +0000 Subject: [PATCH 09/12] docs: export imagecollection --- docs/index.rst | 7 ++ docs/usage/asset.ipynb | 2 +- docs/usage/export.ipynb | 191 ++++++++++++++++++++++++++++++++++++++++ docs/usage/index.rst | 1 + 4 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 docs/usage/export.ipynb diff --git a/docs/index.rst b/docs/index.rst index 0754f11..a5eb83d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -44,6 +44,13 @@ content Manage your assets as a object-oriented file system. + .. grid-item:: + + .. card:: :icon:`fa-solid fa-images` export ImageCollections + :link: usage/export.html + + Useful wrapper to export ImageCollections as simply as Images. + .. grid-item:: .. card:: :icon:`fa-solid fa-handshake-angle` Contribute diff --git a/docs/usage/asset.ipynb b/docs/usage/asset.ipynb index c4ffa4f..3fb228a 100644 --- a/docs/usage/asset.ipynb +++ b/docs/usage/asset.ipynb @@ -61,7 +61,7 @@ "outputs": [], "source": [ "# uncomment if initialization is required\n", - "ee.Initialize(project=\"ee-geetools\")" + "# ee.Initialize()" ] }, { diff --git a/docs/usage/export.ipynb b/docs/usage/export.ipynb new file mode 100644 index 0000000..7cb703b --- /dev/null +++ b/docs/usage/export.ipynb @@ -0,0 +1,191 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exporting ImageCollections\n", + "\n", + "Earth Engine provides numbers of ways to export `ee.Image` as explained in their [documentation](https://developers.google.com/earth-engine/guides/image_export). `geetools`provides an extention to the `ee.Export` class to export `ee.ImageCollection` as well. This is useful when you have a collection of images and you want to export them all at once.\n", + "\n", + "As the vanilla Earth Engine methods were returning Task objects, these method will return lists of Task objects. This ensures that Once the task are launched they can be fully monitored outside from your initial script." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee_community/geetools/blob/main/docs/example/export.ipynb)\n", + "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee_community/geetools/blob/main/docs/example/export.ipynb)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import ee, pytest_gee, os\n", + "\n", + "if \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + " pytest_gee.init_ee_from_service_account()\n", + "elif \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", + "else:\n", + " raise ValueError(\"Cannot authenticate with Earth Engine.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example Set up \n", + "\n", + "Start by defining the image data that will be exported." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ee, geetools" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load a landsat image and select three bands over the whole mont of january 2023\n", + "landsat = (\n", + " ee.ImageCollection(\"LANDSAT/LC08/C02/T1_TOA\")\n", + " .select(['B4', 'B3', 'B2'])\n", + " .filterDate('2023-01-01', '2023-01-31')\n", + ")\n", + "\n", + "# Create a geometry representing an export region.\n", + "geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## to Drive\n", + "\n", + "To export an imageCollection to your Drive account, use `ee.batch.Export.geetools.imagecollection.toDrive()`. For example, to export portions of a Landsat collection, define a region to export, then call Export:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python \n", + "# Export the image to Cloud Storage.\n", + "ee.batch.Export.geetools.imagecollection.toDrive(\n", + " imagecollection = landsat,\n", + " index_property = \"system:id\",\n", + " description = 'imageCollectionToDriveExample',\n", + " scale = 30,\n", + " region = geometry,\n", + " folder = 'geetools_example',\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When this code is run, a list of export task will be created you will need to `start` them to start the export computation in the server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## to Cloud Storage\n", + "\n", + "To export an ImageCollection to a Google Cloud Storage bucket, use `ee.batch.Export.geetools.imagecollection.toCloudStorage()`. To export the Landsat image in the previous example to Cloud Storage instead of Drive, use:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python \n", + "# Export the image to Cloud Storage.\n", + "ee.batch.Export.image.toCloudStorage(\n", + " imagecollection = landsat,\n", + " index_property = \"system:id\",\n", + " description = 'imageToCloudExample',\n", + " bucket = 'your-bucket-name',\n", + " scale = 30,\n", + " region = geometry\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When this code is run, a list of export task will be created you will need to `start` them to start the export computation in the server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## To Asset\n", + "\n", + "To export an ImageCollection to an Earth Engine asset, use `ee.batch.Export.geetools.imagecollection.toAsset()`. To export the Landsat image in the previous example to an asset, use:\n", + "\n", + "When this code is run, a list of export task will be created you will need to `start` them to start the export computation in the server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "# Start the export process.\n", + "ee.batch.Export.geetools.imagecollection.toAsset(\n", + " imagecollection = landsat,\n", + " index_property = \"system:id\",\n", + " assetId = 'projects/username/ladnsat_collection',\n", + " scale = 30,\n", + " region = geometry,\n", + " maxPixels = 1e13,\n", + " pyramidingPolicy = {\n", + " 'b4': 'mean',\n", + " 'b3': 'mean',\n", + " 'b2': 'mean'\n", + " }\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For all function please refer to offcial documentation for complete list of parameters of the `ee.batch.Export.image` methods." + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/usage/index.rst b/docs/usage/index.rst index 2505249..f595fc8 100644 --- a/docs/usage/index.rst +++ b/docs/usage/index.rst @@ -40,5 +40,6 @@ Then you can open a PR with the new file and it will be reviewed and merged. :hidden: template + export plot/index asset \ No newline at end of file From 32b2a1cb2aa6bfe49a5df46e73eec88112c84ac5 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Wed, 16 Oct 2024 18:00:20 +0000 Subject: [PATCH 10/12] fix: make the Asset hashable --- docs/setup/index.rst | 2 +- docs/setup/quickstart.rst | 2 +- docs/usage/asset.ipynb | 25 ++++++++++++++++++++++--- geetools/Asset.py | 11 ++++++++++- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/docs/setup/index.rst b/docs/setup/index.rst index 378e471..9e54a1c 100644 --- a/docs/setup/index.rst +++ b/docs/setup/index.rst @@ -8,7 +8,7 @@ The User Guide covers all of **geetools** by topic area. The :doc:`quickstart` p The use of the package requires a basic understanding of the **Python** programming language and the **GEE Python API**. Users brand-new to Earth Engine should refer to the `Google documentation `__ first. -Further hands-on example of specific tasks can be found in the :doc:`../example/index` section. and for the most advance user please refe to the :doc:`../autoapi/index` section for a complete description of each individual functionality. +Further hands-on example of specific tasks can be found in the :doc:`../usage/index` section. and for the most advance user please refe to the :doc:`../autoapi/index` section for a complete description of each individual functionality. Refactoring ----------- diff --git a/docs/setup/quickstart.rst b/docs/setup/quickstart.rst index d9ea496..d9cfc44 100644 --- a/docs/setup/quickstart.rst +++ b/docs/setup/quickstart.rst @@ -57,7 +57,7 @@ This small example shows how **geetools** is wrapping the excellent ``ee_extra`` .geetools.scaleAndOffset() # Extended (pre-processing) .geetools.spectralIndices(['NDVI','NDWI','BAIS2'])) # Extended (processing) -More examples of more complex and meaningful analysis can be found in the :doc:`../example/index` gallery. +More examples of more complex and meaningful analysis can be found in the :doc:`../usage/index` gallery. F401 ? ------ diff --git a/docs/usage/asset.ipynb b/docs/usage/asset.ipynb index 3fb228a..c718c60 100644 --- a/docs/usage/asset.ipynb +++ b/docs/usage/asset.ipynb @@ -15,6 +15,26 @@ "[![colab](https://img.shields.io/badge/-open%20in%20colab-blue?logo=googlecolab&labelColor=555)](https://colab.research.google.com/github/gee_community/geetools/blob/main/docs/example/asset.ipynb)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "import ee, pytest_gee, os\n", + "\n", + "if \"EARTHENGINE_SERVICE_ACCOUNT\" in os.environ:\n", + " pytest_gee.init_ee_from_service_account()\n", + "elif \"EARTHENGINE_PROJECT\" in os.environ:\n", + " pytest_gee.init_ee_from_token()\n", + "else:\n", + " raise ValueError(\"Cannot authenticate with Earth Engine.\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -283,8 +303,7 @@ "metadata": {}, "outputs": [], "source": [ - "# related to https://github.com/gee-community/geetools/issues/331\n", - "# folder in { ee.Asset(\"projects/ee-geetools/assets/documentation\")}" + "folder in { ee.Asset(\"projects/ee-geetools/assets/documentation\")}" ] }, { @@ -453,7 +472,7 @@ "source": [ "a = ee.Asset(\"projects/ee-geetools/assets/documentation/subfolder1/image1\")\n", "b = ee.Asset(\"projects/ee-geetools/assets/documentation\")\n", - "a.relative_to(b)" + "a.is_relative_to(b)" ] }, { diff --git a/geetools/Asset.py b/geetools/Asset.py index 9da21e3..b42059d 100644 --- a/geetools/Asset.py +++ b/geetools/Asset.py @@ -1,6 +1,7 @@ """An Asset management class mimicking the ``pathlib.Path`` class behaviour.""" from __future__ import annotations +import os import re from pathlib import PurePosixPath from typing import Optional @@ -13,7 +14,7 @@ @_register_extention(ee) -class Asset: +class Asset(os.PathLike): """An Asset management class mimicking the ``pathlib.Path`` class behaviour.""" def __init__(self, *args): @@ -65,6 +66,14 @@ def __idiv__(self, other: pathlike) -> Asset: """Override the in-place division operator to join the asset with other paths.""" return Asset(self._path / str(other)) + def __fspath__(self): + """Implement the os.Pathlike interface.""" + return self.as_posix() + + def __hash__(self): + """make the Asset object hashable.""" + return hash(self.as_posix()) + @classmethod def home(cls) -> Asset: """Return the root asset folder of the used cloud project. From 7ec886dd0d60d47bb10ca581347d7f17515210ad Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Thu, 17 Oct 2024 12:19:22 +0000 Subject: [PATCH 11/12] docs: remove deprecated examples --- docs/usage/plot/map-featurecollection.ipynb | 4 +- .../.ipynb_checkpoints/chart-checkpoint.ipynb | 206 --------- .../cloud_masking-checkpoint.ipynb | 314 ------------- .../map_visualization-checkpoint.ipynb | 366 --------------- .../exportByFeat-checkpoint.ipynb | 153 ------- notebooks/batch/ImageCollectionToDrive.ipynb | 151 ------ notebooks/batch/exportByFeat.ipynb | 153 ------- notebooks/batch/exportToGCS.ipynb | 105 ----- notebooks/bitreader/BitReader.ipynb | 430 ------------------ notebooks/visualization/stretching.ipynb | 141 ------ 10 files changed, 2 insertions(+), 2021 deletions(-) delete mode 100644 notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb delete mode 100644 notebooks/.ipynb_checkpoints/cloud_masking-checkpoint.ipynb delete mode 100644 notebooks/.ipynb_checkpoints/map_visualization-checkpoint.ipynb delete mode 100644 notebooks/batch/.ipynb_checkpoints/exportByFeat-checkpoint.ipynb delete mode 100644 notebooks/batch/ImageCollectionToDrive.ipynb delete mode 100644 notebooks/batch/exportByFeat.ipynb delete mode 100644 notebooks/batch/exportToGCS.ipynb delete mode 100644 notebooks/bitreader/BitReader.ipynb delete mode 100644 notebooks/visualization/stretching.ipynb diff --git a/docs/usage/plot/map-featurecollection.ipynb b/docs/usage/plot/map-featurecollection.ipynb index 5da1f16..0dd03fa 100644 --- a/docs/usage/plot/map-featurecollection.ipynb +++ b/docs/usage/plot/map-featurecollection.ipynb @@ -163,7 +163,7 @@ "ax.set_xlabel(\"Longitude (°)\")\n", "ax.set_ylabel(\"Latitude (°)\")\n", "\n", - "plt.show()" + "display(fig)" ] }, { @@ -221,7 +221,7 @@ "ax.set_xlabel(\"Longitude (°)\")\n", "ax.set_ylabel(\"Latitude (°)\")\n", "\n", - "plt.show()" + "display(fig)" ] }, { diff --git a/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb deleted file mode 100644 index 8e7844f..0000000 --- a/notebooks/.ipynb_checkpoints/chart-checkpoint.ipynb +++ /dev/null @@ -1,206 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# chart module\n", - "\n", - "This module relies on `pygal` library, so the returned charts are instances of `pygal.chart`. See options at \n", - "[pygal site][1]\n", - "\n", - "I made a JavaScript 'equivalent': https://code.earthengine.google.com/b2922b860b85c1120250794fb82dfda8\n", - "\n", - " [1]: http://www.pygal.org/en/latest/documentation/index.html" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from geetools import ui" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "test_site = ee.Geometry.Point([-71, -42])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "test_feat = ee.Feature(test_site, {'name': 'test feature'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "test_featcol = ee.FeatureCollection([\n", - " test_feat, \n", - " test_feat.buffer(100).set('name', 'buffer 100'),\n", - " test_feat.buffer(1000).set('name', 'buffer 1000')\n", - "])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Time Series" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "years = ee.List([2015, 2016, 2017, 2018])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "col = ee.ImageCollection('COPERNICUS/S2').filterBounds(test_site)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def make_time_series(year):\n", - " ''' make a time series from year's list '''\n", - " eefilter = ee.Filter.calendarRange(year, field='year')\n", - " filtered = col.filter(eefilter)\n", - " return filtered.mean().set('system:time_start', ee.Date.fromYMD(year, 1, 1).millis())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "time_series = ee.ImageCollection(years.map(make_time_series))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Chart *series*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "chart_ts = ui.chart.Image.series(**{\n", - " 'imageCollection': time_series, \n", - " 'region': test_site,\n", - " 'scale': 10,\n", - " 'bands': ['B1', 'B2', 'B3'],\n", - " # 'xProperty': 'B4', # You can use a band too!\n", - " 'labels': ['band B1', 'B2 band', 'this is B3']\n", - "})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "chart_ts.render_widget(width='50%')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Chart *seriesByRegion*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "chart_ts_region = ui.chart.Image.seriesByRegion(**{\n", - " 'imageCollection': time_series,\n", - " 'reducer': ee.Reducer.median(),\n", - " 'regions': test_featcol,\n", - " 'scale': 10,\n", - " 'band': 'B11',\n", - " 'seriesProperty': 'name'\n", - "})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "chart_ts_region.render_widget(height=500)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/.ipynb_checkpoints/cloud_masking-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/cloud_masking-checkpoint.ipynb deleted file mode 100644 index cccfe8e..0000000 --- a/notebooks/.ipynb_checkpoints/cloud_masking-checkpoint.ipynb +++ /dev/null @@ -1,314 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Cloud Masking" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Make all imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "from geetools import ui, cloud_mask" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Landsat 8 SR" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map = ui.Map(tabs=('Inspector',))\n", - "Map.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "visL8 = {'bands':['B5','B6','B4'],'min':0, 'max':5000}\n", - " \n", - "image = ee.Image('LANDSAT/LC08/C01/T1_SR/LC08_232090_20140915')\n", - "Map.addLayer(image, visL8, 'Landsat 8 SR Original')\n", - "Map.centerObject(image, zoom=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Using BQA band" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mask_l8SR_all = cloud_mask.landsatSR()\n", - "mask_l8SR_cloud = cloud_mask.landsatSR(['cloud'])\n", - "mask_l8SR_shadow = cloud_mask.landsatSR(['shadow'])\n", - "mask_l8SR_snow = cloud_mask.landsatSR(['snow'])\n", - "\n", - "l8sr_masked_all = mask_l8SR_all(image)\n", - "l8sr_masked_cloud = mask_l8SR_cloud(image)\n", - "l8sr_masked_shadow = mask_l8SR_shadow(image)\n", - "l8sr_masked_snow = mask_l8SR_snow(image)\n", - "\n", - "Map.addLayer(l8sr_masked_all, visL8, 'L8SR masked all')\n", - "Map.addLayer(l8sr_masked_cloud, visL8, 'L8SR masked cloud')\n", - "Map.addLayer(l8sr_masked_shadow, visL8, 'L8SR masked shadow')\n", - "Map.addLayer(l8sr_masked_snow, visL8, 'L8SR masked snow')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Landsat TOA" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "MapTOA = ui.Map(tabs=('Inspector',))\n", - "MapTOA.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "visTOA = {'bands': visL8['bands'], 'min':0, 'max':0.5}\n", - "i_toa = ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_232090_20140915')\n", - "MapTOA.addLayer(i_toa, visTOA, 'Landsat 8 TOA Original')\n", - "MapTOA.centerObject(i_toa, zoom=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using BQA band" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mask_l8TOA_all = cloud_mask.landsat8TOA_BQA()\n", - "mask_l8TOA_cloud = cloud_mask.landsat8TOA_BQA(['cloud'])\n", - "mask_l8TOA_shadow = cloud_mask.landsat8TOA_BQA(['shadow'])\n", - "mask_l8TOA_snow = cloud_mask.landsat8TOA_BQA(['snow'])\n", - "\n", - "l8toa_masked_all = mask_l8TOA_all(i_toa)\n", - "l8toa_masked_cloud = mask_l8TOA_cloud(i_toa)\n", - "l8toa_masked_shadow = mask_l8TOA_shadow(i_toa)\n", - "l8toa_masked_snow = mask_l8TOA_snow(i_toa)\n", - "\n", - "MapTOA.addLayer(l8toa_masked_all, visTOA, 'L8TOA masked all')\n", - "MapTOA.addLayer(l8toa_masked_cloud, visTOA, 'L8TOA masked cloud')\n", - "MapTOA.addLayer(l8toa_masked_shadow, visTOA, 'L8TOA masked shadow')\n", - "MapTOA.addLayer(l8toa_masked_snow, visTOA, 'L8TOA masked snow')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Sentinel 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "MapS2 = ui.Map(tabs=('Inspector',))\n", - "MapS2.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "visS2 = {'bands':['B8','B11','B4'],'min':0, 'max':5000}\n", - "is2 = ee.Image('COPERNICUS/S2/20151123T142942_20170221T180430_T18GYT')\n", - "MapS2.centerObject(is2, zoom=12)\n", - "MapS2.addLayer(is2, visS2, 'Sentinel 2 Original')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ESA Cloud Masking" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ESA_mask_all = cloud_mask.sentinel2()\n", - "is2_ESA = ESA_mask_all(is2)\n", - "MapS2.addLayer(is2_ESA, visS2, 'Sentinel 2 ESA maked')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hollstein Decision Tree" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Hollstein_all = cloud_mask.hollstein_S2()\n", - "Hollstein_cloud = cloud_mask.hollstein_S2(['cloud'])\n", - "Hollstein_shadow = cloud_mask.hollstein_S2(['shadow'])\n", - "Hollstein_snow = cloud_mask.hollstein_S2(['snow'])\n", - "Hollstein_water = cloud_mask.hollstein_S2(['water'])\n", - "Hollstein_cirrus = cloud_mask.hollstein_S2(['cirrus'])\n", - "\n", - "is2_Holl_all = Hollstein_all(is2)\n", - "is2_Holl_cloud = Hollstein_cloud(is2)\n", - "is2_Holl_shadow = Hollstein_shadow(is2)\n", - "is2_Holl_snow = Hollstein_snow(is2)\n", - "is2_Holl_water = Hollstein_water(is2)\n", - "is2_Holl_cirrus = Hollstein_cirrus(is2)\n", - "\n", - "MapS2.addLayer(is2_Holl_all, visS2, 'Sentinel 2 Hollstein all')\n", - "MapS2.addLayer(is2_Holl_cloud, visS2, 'Sentinel 2 Hollstein cloud')\n", - "MapS2.addLayer(is2_Holl_shadow, visS2, 'Sentinel 2 Hollstein shadow')\n", - "MapS2.addLayer(is2_Holl_snow, visS2, 'Sentinel 2 Hollstein snow')\n", - "MapS2.addLayer(is2_Holl_water, visS2, 'Sentinel 2 Hollstein water')\n", - "MapS2.addLayer(is2_Holl_cirrus, visS2, 'Sentinel 2 Hollstein cirrus')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# MODIS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "modis = ee.ImageCollection('MODIS/006/MOD09GA')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "MapMOD = ui.Map(tabs=('Inspector',))\n", - "MapMOD.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "site = ee.Geometry.Point([-71.8, -43])\n", - "date = ee.Date('2017-08-01')\n", - "visMOD = {'bands':['sur_refl_b02', 'sur_refl_b06', 'sur_refl_b01'],'min':0, 'max':5000}\n", - "modis = modis.filterDate(date, date.advance(4, 'month'))\n", - "i_mod = ee.Image(modis.first())\n", - "MapMOD.addLayer(i_mod, visMOD, 'MODIS TERRA Original Image')\n", - "MapMOD.centerObject(site, zoom=8)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Using `state_1km` band" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mod_mask = cloud_mask.modis09ga()\n", - "i_masked = mod_mask(i_mod)\n", - "MapMOD.addLayer(i_masked, visMOD, 'Masked MODIS')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/.ipynb_checkpoints/map_visualization-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/map_visualization-checkpoint.ipynb deleted file mode 100644 index 1359790..0000000 --- a/notebooks/.ipynb_checkpoints/map_visualization-checkpoint.ipynb +++ /dev/null @@ -1,366 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Interactive Maps for Google Earth Engine Python API\n", - "\n", - "### This notebook is a showcase of a new feature of `geetools`, and it is still under active development on https://github.com/gee-community/gee_tools. There are 2 options:\n", - "\n", - "## 1. maptool\n", - "### Based on https://github.com/mccarthyryanc/folium_gee but improved in order to 'emulate' the behavior of Map in the Code Editor. \n", - "#### Pros:\n", - "1. This module can be use to generate html for other purposes like webapps, etc\n", - "2. Can change zoom with mouse scroll\n", - "\n", - "#### Cons:\n", - "1. When using this module you have to complete the Map (addLayer, etc), and at the end use `Map.show()` to show the map. Can't add more layers afterwards.\n", - "2. Takes a long time to show the map\n", - "\n", - "## 2. ipymap\n", - "### Based on https://github.com/gee-community/ee-jupyter-contrib/blob/master/examples/getting-started/display-interactive-map.ipynb\n", - "#### Pros and cons are the opposite to `maptool`\n", - "\n", - "#### *(I'll try to keep this notebook up to date)*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Make imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "ee.Initialize()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Get an image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "col = ee.ImageCollection('COPERNICUS/S2')\n", - "site = ee.Geometry.Point([-72, -42])\n", - "col = col.filterBounds(site).filterMetadata('CLOUD_COVERAGE_ASSESSMENT', 'less_than', 40)\n", - "i = ee.Image(col.first())\n", - "igeom = i.geometry()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# define visualization parameters (dict)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "visParam = {'bands':['B8', 'B11', 'B4'], 'min':0, 'max':5000}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## define inspection\n", - "### `addLayer` has a parameter called `inspect` that defines de content for a pop up, which is a dict with the following keys:\n", - "1. data: eeObject from where to get the data\n", - "2. reducer: can be 'first', 'mean', 'media' and 'sum'\n", - "3. scale: scale to use in the reduction. If not provided, it uses the nominalScale for the image's first band" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "inspect = {'data':i, 'reducer':'mean'}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Plot the image into an interactive Map using `maptool` (Folium)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from geetools.ui import maptool\n", - "Map = maptool.Map()\n", - "\n", - "Map.addLayer(i, visParam, 'Sentinel 2 Patagonia')\n", - "Map.centerObject(i)\n", - "\n", - "Map.addLayer(igeom, name='Image boundries', inspect=inspect)\n", - "\n", - "Map.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Plot the image into an interactive Map using `ipymap` (ipyleaflet)\n", - "## This Map has extra features:\n", - "1. Inspector\n", - "2. Tasks\n", - "3. Assets\n", - "\n", - "### At the moment, the only one working is the inspector" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## First plot an empty Map (you can add stuff here too)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from geetools import ui\n", - "Map2 = ui.Map()\n", - "\n", - "# you can do also:\n", - "# from geetools.ui import ipymap\n", - "# Map2 = ipymap.Map()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## addLayer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.addLayer(i, visParam, 'Sentinel 2 Patagonia')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.addLayer(i, {'bands':['B8'], 'min':0, 'max':5000}, 'just B8')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Center an Image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.centerObject(i)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## addLayer Geometry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.addLayer(igeom, name='Image boundries')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Center a Geometry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.centerObject(igeom)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get Map Center" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "center = Map2.getCenter()\n", - "center.getInfo()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get Map Bounds" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "bounds = Map2.getBounds()\n", - "bounds.getInfo()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Remove a layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map2.removeLayer('Sentinel 2 Patagonia')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# TABS\n", - "## You can add a custom Tab with a custom handler. The handler is a function with 4 main parameters:\n", - "- **type:** the interaction type. Can be 'click', 'mouseover', etc\n", - "- **coordinates:** the coordinates where the interaction has taken place. If you have used ipyleaflet before, take in consideraton that coordinates are inverted (to match GEE format): [longitud, latitude]\n", - "- **widget:** The widget inside the Tab. Defaults to an empty HTML widget\n", - "- **map:** the Map instance. You can apply any of its methods, or get any of its properties" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(Map2.addTab.__doc__)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def test_handler(**change): \n", - " # PARAMS\n", - " ty = change['type']\n", - " coords = change['coordinates']\n", - " wid = change['widget']\n", - " themap = change['map']\n", - " \n", - " if ty == 'click': # If interaction was a click\n", - " # Loading message before sending a request to EE\n", - " wid.value = 'Loading...'\n", - " # Map's bounds\n", - " bounds = themap.getBounds().getInfo()['coordinates']\n", - " # Change Widget Value\n", - " wid.value = \"You have clicked on {} and map's bounds are {}\".format(coords, bounds)\n", - "\n", - "Map2.addTab('TestTAB', test_handler)\n", - "print(\"Check out the Map!\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/batch/.ipynb_checkpoints/exportByFeat-checkpoint.ipynb b/notebooks/batch/.ipynb_checkpoints/exportByFeat-checkpoint.ipynb deleted file mode 100644 index 83a6d02..0000000 --- a/notebooks/batch/.ipynb_checkpoints/exportByFeat-checkpoint.ipynb +++ /dev/null @@ -1,153 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# exportByFeat(img, fc, prop, folder, name, scale, dataType, **kwargs):\n", - "Export an image clipped by features (Polygons). You can use the same arguments as the original function ee.batch.export.image.toDrive\n", - "\n", - "**Parameters**\n", - "\n", - "- img: image to clip\n", - "- fc: feature collection\n", - "- prop: name of the property of the features to paste in the image\n", - "- folder: same as ee.Export\n", - "- name: name of the resulting image. If `None` uses image's ID\n", - "- scale: same as ee.Export. Default to 1000\n", - "- dataType: as downloaded images **must** have the same data type in all\n", - " bands, you have to set it here. Can be one of: \"float\", \"double\", \"int\",\n", - " \"Uint8\", \"Int8\" or a casting function like *ee.Image.toFloat*\n", - "- kwargs: keyword arguments that will be passed to ee.batch.export.image.toDrive\n", - "\n", - "Return a list of all tasks (for further processing/checking)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "ee.Initialize()\n", - "from geetools import batch" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## FeatureCollection" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "p1 = ee.Geometry.Point([-71,-42])\n", - "p2 = ee.Geometry.Point([-71,-43])\n", - "p3 = ee.Geometry.Point([-71,-44])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "feat1 = ee.Feature(p1.buffer(1000), {'site': 1})\n", - "feat2 = ee.Feature(p2.buffer(1000), {'site': 2})\n", - "feat3 = ee.Feature(p3.buffer(1000), {'site': 3})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fc = ee.FeatureCollection([feat1, feat2, feat3])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "collection = ee.ImageCollection('COPERNICUS/S2').filterBounds(fc.geometry())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "image = collection.mosaic()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Execute" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "task = batch.Export.image.toDriveByFeature(\n", - " image, \n", - " collection=fc, \n", - " folder='tools_exportbyfeat', \n", - " name='test {site}', \n", - " scale=10, \n", - " dataType='float',\n", - " verbose=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/batch/ImageCollectionToDrive.ipynb b/notebooks/batch/ImageCollectionToDrive.ipynb deleted file mode 100644 index 0f7c018..0000000 --- a/notebooks/batch/ImageCollectionToDrive.ipynb +++ /dev/null @@ -1,151 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Export an ImageCollection to Google Drive" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "ee.Initialize()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import geetools" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ipygee as ui" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define an ImageCollection" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "site = ee.Geometry.Point([-72, -42]).buffer(1000)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "collection = ee.ImageCollection(\"LANDSAT/LC08/C01/T1_SR\").filterBounds(site).limit(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set parameters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "help(geetools.batch.Export.imagecollection.toDrive)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "bands = ['B2', 'B3', 'B4']\n", - "scale = 30\n", - "name_pattern = '{sat}_{system_date}_{WRS_PATH:%d}-{WRS_ROW:%d}'\n", - "date_pattern = 'ddMMMy' # dd: day, MMM: month (JAN), y: year\n", - "folder = 'MYFOLDER'\n", - "data_type = 'uint32'\n", - "extra = dict(sat='L8SR')\n", - "region = site" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Export" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tasks = geetools.batch.Export.imagecollection.toDrive(\n", - " collection=collection,\n", - " folder=folder,\n", - " region=site,\n", - " namePattern=name_pattern,\n", - " scale=scale,\n", - " dataType=data_type,\n", - " datePattern=date_pattern,\n", - " extra=extra,\n", - " verbose=True,\n", - " maxPixels=int(1e13)\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/batch/exportByFeat.ipynb b/notebooks/batch/exportByFeat.ipynb deleted file mode 100644 index ff287ef..0000000 --- a/notebooks/batch/exportByFeat.ipynb +++ /dev/null @@ -1,153 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# exportByFeat(img, fc, prop, folder, name, scale, dataType, **kwargs):\n", - "Export an image clipped by features (Polygons). You can use the same arguments as the original function ee.batch.export.image.toDrive\n", - "\n", - "**Parameters**\n", - "\n", - "- img: image to clip\n", - "- fc: feature collection\n", - "- prop: name of the property of the features to paste in the image\n", - "- folder: same as ee.Export\n", - "- name: name of the resulting image. If `None` uses image's ID\n", - "- scale: same as ee.Export. Default to 1000\n", - "- dataType: as downloaded images **must** have the same data type in all\n", - " bands, you have to set it here. Can be one of: \"float\", \"double\", \"int\",\n", - " \"Uint8\", \"Int8\" or a casting function like *ee.Image.toFloat*\n", - "- kwargs: keyword arguments that will be passed to ee.batch.export.image.toDrive\n", - "\n", - "Return a list of all tasks (for further processing/checking)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "ee.Initialize()\n", - "from geetools import batch" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## FeatureCollection" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "p1 = ee.Geometry.Point([-71,-42])\n", - "p2 = ee.Geometry.Point([-71,-43])\n", - "p3 = ee.Geometry.Point([-71,-44])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "feat1 = ee.Feature(p1.buffer(1000), {'site': 1})\n", - "feat2 = ee.Feature(p2.buffer(1000), {'site': 2})\n", - "feat3 = ee.Feature(p3.buffer(1000), {'site': 3})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fc = ee.FeatureCollection([feat1, feat2, feat3])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "collection = ee.ImageCollection('COPERNICUS/S2').filterBounds(fc.geometry())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "image = collection.mosaic()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Execute" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "task = batch.Export.image.toDriveByFeature(\n", - " image, \n", - " collection=fc, \n", - " folder='tools_exportbyfeat', \n", - " namePattern='test {site}',\n", - " scale=10, \n", - " dataType='float',\n", - " verbose=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/batch/exportToGCS.ipynb b/notebooks/batch/exportToGCS.ipynb deleted file mode 100644 index 92ef9bb..0000000 --- a/notebooks/batch/exportToGCS.ipynb +++ /dev/null @@ -1,105 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Exporting collection to Cloud Storage\n", - "\n", - "### toCloudStorage(collection, bucket=\"opencrops\", folder=None, namePattern='{id}', scale=30, dataType=\"float\", region=None, datePattern=None):\n", - "Export an image clipped by features (Polygons). You can use the same arguments as the original function ee.batch.export.image.toDrive\n", - "\n", - "**Parameters**\n", - "\n", - "- collection: image collection\n", - "- bucket: GCS bucket\n", - "- folder: same as ee.Export\n", - "- name: name of the resulting image. If `None` uses image's ID\n", - "- scale: same as ee.Export. Default to 1000\n", - "- dataType: as downloaded images **must** have the same data type in all\n", - " bands, you have to set it here. Can be one of: \"float\", \"double\", \"int\",\n", - " \"Uint8\", \"Int8\" or a casting function like *ee.Image.toFloat*\n", - "- region: geometry to clip export\n", - "- kwargs: keyword arguments that will be passed to ee.batch.export.image.toCloudStorage\n", - "\n", - "Return a list of all tasks (for further processing/checking)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "import sys\n", - "sys.path.append(\"../..\")\n", - "ee.Initialize()\n", - "from geetools import batch" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get an Image Collection" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "p1 = ee.Geometry.Point([-71,-42])\n", - "feat1 = ee.Feature(p1.buffer(1000), {'site': 1})\n", - "fc = ee.FeatureCollection([feat1])\n", - "collection = ee.ImageCollection('COPERNICUS/S2').filterBounds(fc.geometry()).filterDate(\"2015-01-01\",\"2015-12-01\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# please ensure that you have a default project enabled\n", - "# and change this bucket with a bucket you have write access\n", - "BUCKET = \"opencrops\"\n", - "\n", - "batch.imagecollection.toCloudStorage(collection, bucket=BUCKET, folder=\"geetools\", scale=30, verbose=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# check the storage bucket via the gsutil tool\n", - "!gsutil ls gs://opencrops/geetools" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/bitreader/BitReader.ipynb b/notebooks/bitreader/BitReader.ipynb deleted file mode 100644 index 34f24a6..0000000 --- a/notebooks/bitreader/BitReader.ipynb +++ /dev/null @@ -1,430 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Bit Reader\n", - "Encode/Decode a set of bits" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Initializes with parameter `options`, which must be a dictionary with the following format:\n", - "\n", - "- keys must be a str with the bits places, example: '0-1' means bit 0 and bit 1\n", - "\n", - "- values must be a dictionary with the bit value as the key and the category (str) as value. Categories must be unique.\n", - "\n", - "- Encode: given a category/categories return a list of possible values\n", - "- Decode: given a value return a list of categories" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example\n", - "\n", - "MOD09 (http://modis-sr.ltdri.org/guide/MOD09_UserGuide_v1_3.pdf)\n", - "(page 28, state1km, 16 bits):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "ee.Initialize()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from geetools import bitreader, cloud_mask" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "options = {\n", - " '0-1': {0:'clear', 1:'cloud', 2:'mix'}, # cloud state\n", - " '2-2': {0: 'no_shadow', 1:'shadow'}, # cloud shadow (bit 0 is not needed)\n", - " '6-7': {0:'climatology', 1:'low', 2:'average', 3:'high'} # land/water flag\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader = bitreader.BitReader(options, 16)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Internally it computes a dict with\n", - "- bit_length (length of the group of bits)\n", - "- lshift (left shift)\n", - "- shifted (shifted places)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.info" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('bit length', reader.bit_length)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "DECODE ONE VALUE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "value = 204\n", - "bits = reader.getBin(value)\n", - "print('204:', bits)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.decode(204)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "MATCH ONE VALUE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.match(204, 'cloud')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.match(204, 'shadow')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ENCODE A VALUE (EXCLUSIVELY)\n", - "\n", - "In this case, shadow is 00000100 (4) and **not** 00000101 (5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.encode('shadow')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.encode('clear')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reader.encode('no_shadow')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ENCODE A VALUE (ALL)\n", - "\n", - "This will get **all** values (all combinations where the bit is set)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(reader.encodeOne('shadow')[0:100])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(reader.encodeOne('cloud')[0:100])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ENCODE AND" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(reader.encodeAnd('cloud', 'shadow')[0:100])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### DECODE AN IMAGE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ipygee as ui" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map = ui.Map()\n", - "Map.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "modcol = ee.ImageCollection('MODIS/006/MOD09GA').sort('system:time_start', False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mod = ee.Image(modcol.first())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "BANDS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "red = 'sur_refl_b01'\n", - "green = 'sur_refl_b04'\n", - "blue = 'sur_refl_b03'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "qa = 'state_1km'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "qa_mask = mod.select(qa)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map.addLayer(mod, {'bands':[red, green, blue], 'min':0, 'max':5000}, 'Original')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map.addLayer(qa_mask, {'min':0, 'max':reader.max}, 'QA')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "APPLY THE `BitReader` TO THE BAND THAT HOLDS THE BIT INFORMATION" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mask = reader.decodeImage(mod, qa)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map.addLayer(mask.select(['cloud']), {'min':0, 'max':1}, 'Clouds')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`BitReader` INFORMATION FOR KNOW COLLECTIONS AVAILABLE IN `geetools.cloud_mask` MODULE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from geetools import cloud_mask" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "state1km = cloud_mask.BITS_MODIS09GA" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "state1km" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks/visualization/stretching.ipynb b/notebooks/visualization/stretching.ipynb deleted file mode 100644 index a894d80..0000000 --- a/notebooks/visualization/stretching.ipynb +++ /dev/null @@ -1,141 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ee\n", - "ee.Initialize()\n", - "import geetools" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ipygee as ui" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Map = ui.Map()\n", - "Map.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Site" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "site = ee.Geometry.Point([-71.5, -41.7]).buffer(2000)\n", - "Map.centerObject(site)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Image" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "image = ee.Image('COPERNICUS/S2/20151123T142942_20170221T180430_T18GYU')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualization\n", - "\n", - "For larger areas you can choose a greater scale to avoid waiting too long for getting visualization values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Standard Deviation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for std in range(1, 5):\n", - " stretch = geetools.visualization.stretch_std(image, site, ['B4', 'B3', 'B2'], std, scale=10)\n", - " Map.addLayer(image, stretch, 'RGB stretched by {} standard deviation'.format(std))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Percentile" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Try many\n", - "for st in range(10, 110, 10):\n", - " stretch = geetools.visualization.stretch_percentile(image, site, ['B4', 'B3', 'B2'], st, scale=10)\n", - " Map.addLayer(image, stretch, 'RGB stretched by {}%'.format(st))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} From c8a2ee3e58a4fa80d9170d44ba47fef1ac68d055 Mon Sep 17 00:00:00 2001 From: Pierrick Rambaud Date: Thu, 17 Oct 2024 13:22:42 +0000 Subject: [PATCH 12/12] test: regenerate image_with_fc_plot as default color have changed --- tests/test_Image/test_plot_with_fc.png | Bin 55795 -> 53490 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/test_Image/test_plot_with_fc.png b/tests/test_Image/test_plot_with_fc.png index 1480d17bd797076fd1c83ad3181a77ca0a99c4e5..5a0dda079152fe1b9d8560f42d5ff7a8573401d6 100644 GIT binary patch literal 53490 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 literal 55795 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 UOeKaPjR?Fv+`Lb)aluLd1!^b=eE