﻿{"id":14502,"date":"2025-07-11T10:00:00","date_gmt":"2025-07-11T08:00:00","guid":{"rendered":"https:\/\/www.sigterritoires.fr\/?p=14502"},"modified":"2025-07-01T10:31:08","modified_gmt":"2025-07-01T08:31:08","slug":"generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/","title":{"rendered":"Generate an automatic report with QGIS and Data Plotly: integrate graphics into a PDF atlas"},"content":{"rendered":"\n<p>Having seen how to create and export a series of graphs with <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/visualize-your-gis-data-in-qgis-with-the-data-plotly-plugin\/\">Data Plotly<\/a>, let&rsquo;s move on to the next step: integrating these graphs into a QGIS atlas or automated report. This method can be used to produce customized PDF reports or thematic sheets, one per range, commune, site or entity.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenu <\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Objective\" >Objective<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Use_case_example\" >Use case example<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Step_1_Prepare_graphics_for_each_range\" >Step 1: Prepare graphics for each range<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Step_2_Create_the_layout_in_the_Layout_Composer\" >Step 2: Create the layout in the Layout Composer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Step_3_Dynamically_insert_PNG_graphics\" >Step 3: Dynamically insert PNG graphics<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Step_4_Export_the_atlas\" >Step 4: Export the atlas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Bonus_add_dynamic_statistics\" >Bonus: add dynamic statistics<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#To_summarize\" >To summarize<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Use_case_ideas\" >Use case ideas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/en\/generate-an-automatic-report-with-qgis-and-data-plotly-integrate-graphics-into-a-pdf-atlas\/#Coming_soon%E2%80%A6\" >Coming soon\u2026<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Objective\"><\/span>Objective<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a dynamic PDF report by entity (e.g.: one sheet per beach);<\/li>\n\n\n\n<li>Insert graphs generated with Data Plotly into each atlas page;<\/li>\n\n\n\n<li>Use QGIS Atlas functions and a little automation.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Use_case_example\"><\/span>Use case example<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>You have a releves_dechets layer and a beaches (or communes) layer. You want to create a report for each beach, containing :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The name of the beach<\/li>\n\n\n\n<li>A zoomed-in map of the area<\/li>\n\n\n\n<li>A PNG graphic representing the waste collected (created with Data Plotly)<\/li>\n\n\n\n<li>Some dynamic statistics (sum, average&#8230;)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_1_Prepare_graphics_for_each_range\"><\/span>Step 1: Prepare graphics for each range<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Use the Python script described above to generate one PNG image per range:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>graph_Anse_Mourouk.png, graph_Pointe_Coton.png, etc.<\/li>\n\n\n\n<li>Make sure the image name corresponds exactly to the value of the range field in the main layer.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_2_Create_the_layout_in_the_Layout_Composer\"><\/span>Step 2: Create the layout in the Layout Composer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to Project &gt; Layout &gt; New layout<\/li>\n\n\n\n<li>Add :\n<ul class=\"wp-block-list\">\n<li>A map frame (linked to the beach layer)<\/li>\n\n\n\n<li>A dynamic text field (e.g.: [% \u00ab\u00a0beach\u00a0\u00bb %])<\/li>\n\n\n\n<li>An image frame: click on the \u00ab\u00a0Add image\u00a0\u00bb icon<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Activate the Atlas :\n<ul class=\"wp-block-list\">\n<li>Cover object = layer (e.g. beaches)<\/li>\n\n\n\n<li>Sorting (optional): you can choose a field for page order (e.g. name)<\/li>\n\n\n\n<li>Filter entities with an expression (optional)<\/li>\n\n\n\n<li>Automatic zoom on entity<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click on your main map in the layout (the map to be automatically centered)<\/li>\n\n\n\n<li>In the Object Properties panel, Atlas Attributes section, check :\n<ul class=\"wp-block-list\">\n<li>\u2705 Controlled by atlas<\/li>\n\n\n\n<li>\u2705 Fit to entity<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"382\" data-attachment-id=\"14285\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/generer-un-rapport-automatique-avec-qgis-et-data-plotly-integrer-des-graphiques-dans-un-atlas-pdf\/composeur_plotly\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?fit=1680%2C1002&amp;ssl=1\" data-orig-size=\"1680,1002\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"composeur_plotly\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?fit=640%2C382&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?resize=640%2C382&#038;ssl=1\" alt=\"\" class=\"wp-image-14285\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?resize=1024%2C611&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?resize=300%2C179&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?resize=768%2C458&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?resize=1536%2C916&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?w=1680&amp;ssl=1 1680w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_3_Dynamically_insert_PNG_graphics\"><\/span>Step 3: Dynamically insert PNG graphics<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>In the image frame, check \u201cImage path from data\u201d<\/p>\n\n\n\n<p>Then enter an expression like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'file:\/\/\/C:\/temp\/export_graphiques\/graph_' || \"plage\" || '.png'<\/code><\/pre>\n\n\n\n<p>This will automatically display the image corresponding to each entity.<\/p>\n\n\n\n<p>Tip: you can use replace(\u00ab\u00a0plage\u00a0\u00bb, \u2018 \u2019, \u2018_\u2019) if file names don&rsquo;t have spaces.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"341\" data-attachment-id=\"14286\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/generer-un-rapport-automatique-avec-qgis-et-data-plotly-integrer-des-graphiques-dans-un-atlas-pdf\/composeur_plotly_expression\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?fit=1633%2C870&amp;ssl=1\" data-orig-size=\"1633,870\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"composeur_plotly_expression\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?fit=640%2C341&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?resize=640%2C341&#038;ssl=1\" alt=\"\" class=\"wp-image-14286\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?resize=1024%2C546&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?resize=300%2C160&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?resize=768%2C409&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?resize=1536%2C818&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?w=1633&amp;ssl=1 1633w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"431\" data-attachment-id=\"14287\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/generer-un-rapport-automatique-avec-qgis-et-data-plotly-integrer-des-graphiques-dans-un-atlas-pdf\/composeur_plotly_graphique\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?fit=1271%2C855&amp;ssl=1\" data-orig-size=\"1271,855\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"composeur_plotly_graphique\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?fit=640%2C431&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?resize=640%2C431&#038;ssl=1\" alt=\"\" class=\"wp-image-14287\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?resize=1024%2C689&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?resize=300%2C202&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?resize=768%2C517&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_graphique.jpg?w=1271&amp;ssl=1 1271w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_4_Export_the_atlas\"><\/span>Step 4: Export the atlas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on \u201cExport Atlas as PDF\u201d ;<\/li>\n\n\n\n<li>Choose an output folder;<\/li>\n\n\n\n<li>Each page will contain: the map, the beach name, the graph, and associated info.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Bonus_add_dynamic_statistics\"><\/span>Bonus: add dynamic statistics<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Add text fields with QGIS expressions such as :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aggregate(\u2018releves_dechets\u2019, \u2018sum\u2019, \u201cquantite\u201d, filter := \u201cplage\u201d = attribute(@atlas_feature, \u2018plage\u2019))<\/code><\/pre>\n\n\n\n<p>This provides automatic totals or averages for each record.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"To_summarize\"><\/span>To summarize<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Function<\/th><\/tr><\/thead><tbody><tr><td>Graphics generation<\/td><td>With Data Plotly + Python<\/td><\/tr><tr><td>Customized layout<\/td><td>QGIS composer<\/td><\/tr><tr><td>Automatic insertion<\/td><td>Dynamic fields + path to PNG<\/td><\/tr><tr><td>Export multi-page PDF<\/td><td>Atlas function<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Use_case_ideas\"><\/span>Use case ideas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Observation sheets by commune (fauna, flora, waste)<\/li>\n\n\n\n<li>Environmental reports by site<\/li>\n\n\n\n<li>Census maps + graphics<\/li>\n\n\n\n<li>Site or project monitoring<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Coming_soon%E2%80%A6\"><\/span>Coming soon\u2026<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>In the next article, we&rsquo;ll go a step further and show you how to create a dynamic dashboard in QGIS itself, without leaving the GIS environment: combine Data Plotly, expressions, widgets and panels to build a real-time analysis interface.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Having seen how to create and export a series of graphs with Data Plotly, let&rsquo;s move on to the next step: integrating these graphs into a QGIS atlas or automated report. This method can be used&hellip;<\/p>\n","protected":false},"author":1,"featured_media":14508,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3394,1377],"tags":[3468,3406],"class_list":["post-14502","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pluigin-en","category-qgis-en","tag-data-plotly-en","tag-graphiques-en"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/06\/composeur_plotly_expression-1.jpg?fit=1633%2C870&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-3LU","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/14502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=14502"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/14502\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media\/14508"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=14502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=14502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=14502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}