From f05755f733c2e02215eaddbeb8e888827b9dbfc0 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 20 Feb 2023 11:29:09 +0100 Subject: [PATCH] r.stats.zonal manual: add screenshots (#2577) * r.stats.zonal manual: add figure to illustrate module functionality along with jupyter notebook * r.series: bugfix for labeling --- .../r.series/graphics_for_description.ipynb | 4 +- raster/r.series/r_series.png | Bin 7750 -> 8679 bytes .../graphics_for_description.ipynb | 110 ++++++++++++++++++ raster/r.stats.zonal/r.stats.zonal.html | 14 +++ raster/r.stats.zonal/r_stats.zonal.png | Bin 0 -> 16561 bytes 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 raster/r.stats.zonal/graphics_for_description.ipynb create mode 100644 raster/r.stats.zonal/r_stats.zonal.png diff --git a/raster/r.series/graphics_for_description.ipynb b/raster/r.series/graphics_for_description.ipynb index a2df16660f8..adb2f2c1483 100644 --- a/raster/r.series/graphics_for_description.ipynb +++ b/raster/r.series/graphics_for_description.ipynb @@ -6,7 +6,7 @@ "source": [ "# Graphics for Description of r.series\n", "\n", - "Requires _d.explanation.plot_, _pngquant_, _optipng_ and ImageMagic _mogrify_." + "Requires _d.explanation.plot_ (GRASS GIS addon), _pngquant_, _optipng_ and ImageMagic _mogrify_." ] }, { @@ -56,7 +56,7 @@ " d=\"d\",\n", " label_a=\"input 1\",\n", " label_b=\"input 2\",\n", - " label_c=\"input 1\",\n", + " label_c=\"input 3\",\n", " label_d=\"average\",\n", " operator_font=\"FreeMono:Regular\",\n", ")\n", diff --git a/raster/r.series/r_series.png b/raster/r.series/r_series.png index 6ed3cdfb3048d93e49c2ed29aa025f7a94eb3ac1..47c821f71d44ab66c5f80a5cce196c0073a55612 100644 GIT binary patch literal 8679 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 IW*7E<0Fv&BegFUf literal 7750 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�K&owPQ)-SL?#t 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 Q|7FR5I>y=!nockN1IC%|W&i*H diff --git a/raster/r.stats.zonal/graphics_for_description.ipynb b/raster/r.stats.zonal/graphics_for_description.ipynb new file mode 100644 index 00000000000..38b0f4c2a1a --- /dev/null +++ b/raster/r.stats.zonal/graphics_for_description.ipynb @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Graphics for description of r.stats.zonal\n", + "\n", + "To be run in a GRASS GIS session, North Carolina sample dataset.\n", + "\n", + "Requires _d.explanation.plot_ (GRASS GIS addon), _pngquant_, _optipng_ and ImageMagic _mogrify_." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from IPython.display import Image\n", + "\n", + "import grass.script as gs\n", + "import grass.jupyter as gj\n", + "\n", + "gs.set_raise_on_error(True)\n", + "gs.set_capture_stderr(True)\n", + "os.environ[\"GRASS_OVERWRITE\"] = \"1\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# zoom to spatial subset of \"zipcodes\" map (5 x 5 pixels)\n", + "!g.region n=225430 s=225380 w=640250 e=640300 res=10 -p\n", + "\n", + "# average elevation in zipcode areas\n", + "!r.stats.zonal base=zipcodes cover=elevation method=average output=zipcodes_elev_avg\n", + "!r.colors zipcodes_elev_avg color=elevation -g" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot = gj.Map(use_region=True, width=1100, height=1100)\n", + "plot.d_background(color=\"white\")\n", + "plot.run(\n", + " \"d.explanation.plot\",\n", + " a=\"zipcodes\",\n", + " b=\"elevation\",\n", + " c=\"zipcodes_elev_avg\",\n", + " label_a=\"zipcode areas\",\n", + " label_b=\"elevation\",\n", + " label_c=\"Avg elev. / area\",\n", + " operator_font=\"FreeMono:Regular\",\n", + ")\n", + "plot.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "filename = \"r_stats.zonal.png\"\n", + "plot.save(filename)\n", + "!mogrify -trim {filename}\n", + "!pngquant --ext \".png\" -f {filename}\n", + "!optipng -o7 {filename}\n", + "Image(filename)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/raster/r.stats.zonal/r.stats.zonal.html b/raster/r.stats.zonal/r.stats.zonal.html index 80806080483..9e5d83bef01 100644 --- a/raster/r.stats.zonal/r.stats.zonal.html +++ b/raster/r.stats.zonal/r.stats.zonal.html @@ -34,6 +34,20 @@

EXAMPLE

r.colors zipcodes_elev_avg color=elevation -g +

+ +

+ + Zonal (average) elevation statistics + +

+ Figure: ZIP code map on the left shows ZIP code areas, + elevation map the respective values per pixel, + zonal statistics map on the right shows the average elevation per zone + (all maps: spatial subset). +
+ +

SEE ALSO

    diff --git a/raster/r.stats.zonal/r_stats.zonal.png b/raster/r.stats.zonal/r_stats.zonal.png new file mode 100644 index 0000000000000000000000000000000000000000..054ce0b2e8d9ce1fd11a364b9480b6a374e10a87 GIT binary patch literal 16561 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 literal 0 HcmV?d00001