{"data":{"markdownRemark":{"html":"<h2 id=\"visualizing-the-supply-chain-network-using-python\"><a href=\"#visualizing-the-supply-chain-network-using-python\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Visualizing The Supply Chain Network Using Python</h2>\n<p>The Simudyne SDK is designed for large-scale simulation workloads where the need for performance outweighs the requirement for visualizing the results. Because data is easily exposed and can be pulled into a preferred data science toolkit, it's recommended that users run their simulations and pass the output data to a tool like Python for visualizing the data.</p>\n<p>In this example we will provide a sample of how the supply chain network can be visualized on a map and how to map results.</p>\n<h2 id=\"using-plotly\"><a href=\"#using-plotly\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Using Plotly</h2>\n<p>By using plotly we can create an interactive map where hovering over the nodes allows us to visualize information about the facilities in our simulation. Below we use the simple example provided in the supply toolkit and map the 2 facilities. The code below creates the interactive map and makes it possible to hover over the nodes to view facility specific information / results.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> pandas <span class=\"token keyword\">as</span> pd\n<span class=\"token keyword\">import</span> plotly<span class=\"token punctuation\">.</span>express <span class=\"token keyword\">as</span> px\n\n<span class=\"token comment\"># Load the data</span>\nfacilities1 <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>read_csv<span class=\"token punctuation\">(</span><span class=\"token string\">'PATH TO YOUR FACILITY INPUTS'</span><span class=\"token punctuation\">)</span>\nfacilities2 <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>read_csv<span class=\"token punctuation\">(</span><span class=\"token string\">'PATH TO YOUR FACILITY INPUTS'</span><span class=\"token punctuation\">)</span>\ndata <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>read_csv<span class=\"token punctuation\">(</span><span class=\"token string\">'PATH TO RUN DATA'</span><span class=\"token punctuation\">)</span>\n\nfacilities <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>concat<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>facilities1<span class=\"token punctuation\">,</span> facilities2<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\ndata <span class=\"token operator\">=</span> data<span class=\"token punctuation\">.</span>rename<span class=\"token punctuation\">(</span>columns<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token string\">'_id'</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'id'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nlatest_data <span class=\"token operator\">=</span> data<span class=\"token punctuation\">.</span>groupby<span class=\"token punctuation\">(</span><span class=\"token string\">'id'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>last<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>reset_index<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\nmerged_data <span class=\"token operator\">=</span> facilities<span class=\"token punctuation\">.</span>merge<span class=\"token punctuation\">(</span>latest_data<span class=\"token punctuation\">,</span> on<span class=\"token operator\">=</span><span class=\"token string\">'id'</span><span class=\"token punctuation\">,</span> how<span class=\"token operator\">=</span><span class=\"token string\">'left'</span><span class=\"token punctuation\">)</span>\n\nmapbox_access_token <span class=\"token operator\">=</span> <span class=\"token string\">'INSERT YOUR MAPBOX TOKEN HERE'</span>\n\nfig <span class=\"token operator\">=</span> px<span class=\"token punctuation\">.</span>scatter_mapbox<span class=\"token punctuation\">(</span>merged_data<span class=\"token punctuation\">,</span>\n                        lat<span class=\"token operator\">=</span><span class=\"token string\">\"latitude_x\"</span><span class=\"token punctuation\">,</span>\n                        lon<span class=\"token operator\">=</span><span class=\"token string\">\"longitude_x\"</span><span class=\"token punctuation\">,</span>\n                        hover_name<span class=\"token operator\">=</span><span class=\"token string\">\"id\"</span><span class=\"token punctuation\">,</span>\n                        hover_data<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>\n                            <span class=\"token string\">'id'</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span>\n                            <span class=\"token string\">'latitude_x'</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span>\n                            <span class=\"token string\">'longitude_x'</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span>\n                            <span class=\"token string\">'nbUnitsProcessed'</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span>\n                            <span class=\"token string\">'totalShipmentCost'</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span>\n                            <span class=\"token string\">'costPerUnit'</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span>\n                        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n                        color_discrete_sequence<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"fuchsia\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                        zoom<span class=\"token operator\">=</span><span class=\"token number\">3</span><span class=\"token punctuation\">)</span>\n\nfig<span class=\"token punctuation\">.</span>update_layout<span class=\"token punctuation\">(</span>mapbox_style<span class=\"token operator\">=</span><span class=\"token string\">\"light\"</span><span class=\"token punctuation\">,</span> mapbox_accesstoken<span class=\"token operator\">=</span>mapbox_access_token<span class=\"token punctuation\">)</span>\nfig<span class=\"token punctuation\">.</span>update_layout<span class=\"token punctuation\">(</span>margin<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token string\">\"r\"</span><span class=\"token punctuation\">:</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"t\"</span><span class=\"token punctuation\">:</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"l\"</span><span class=\"token punctuation\">:</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"b\"</span><span class=\"token punctuation\">:</span><span class=\"token number\">0</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\nfig<span class=\"token punctuation\">.</span>show<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>By modifying the code above you can change the fields and add on to the map figure for displaying edges, information along those edges, as well as any customizations that you wish to include.</p>\n<p>Below is a screenshot of the visualization that is created from the code above:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-85a94.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 53.216911764705884%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB9UlEQVQoz12Tu3LaUBCGeYCULvIE6TPjIlWalH5nF56EmxMCEmDERQIBEkLnqjAxttH82T1CJKT4R2eks9/+e1FjGkawVpMMtFYwRjvxWUjhxN92+wx+EKA98NDqD7DabGDP93KRozcc4aHZQqPr+dgkyQXCUko6pWkCSUBF7xjKdxjUHz+5BLUJVrReYxIt0ehQRr4gCVAU5gLky4dD4RwmaQqjqQpjUFiLcBVTInllgrWkZM5hm0qYhiGkIDdSuhYUhXUJWEpLaKuwl3sIJdxZ2wqW7feYRRECit/R2QE7A5LnIdmyk8ph1U8q01bO5E4gnMVYhmuonL6JCsgtmSwW6I3GWG23NdDDIz25L1wGl+OgigZ01Dg0f+F0e8Lp0xuePx7x8uEVr3cvEGnunI1nczDHC6b/AbOs6uHZpSGg/E1TvrfAewA3pHekBlDelAj8EC1vQC3z3PRHBHZDqfvIvahL5lK0pNU55NAPCuWX0ul0VwK3wPPnI7qPZMan+EFlajid/QU6l/4QMU1Kn9eG3VoaiskN7Iw0py0IKMlEYNxeoI6t4y/Ai0sH9SvoeRV4XbShaaoMq90aiUjxtFrgm/fzCsYVXpX879ObBNjy7plqfaI4RqvXx9fvPfzwRwjmITp935Xape3oUNx9s01/yxB/AMyZGSE8fW+/AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-8e416.webp 173w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-0b506.webp 345w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-58be5.webp 690w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-59b8d.webp 1035w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-4a474.webp 1380w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-bc809.webp 2070w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-7ed14.webp 2176w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-7e3fa.png 173w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-7f1d4.png 345w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-13856.png 690w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-045bb.png 1035w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-f46ab.png 1380w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-ea5f6.png 2070w,\n/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-85a94.png 2176w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-13856.png\"\n          alt=\"supply dashboard\"\n          title=\"\"\n          src=\"/static/supply_dashboard-6bcf43647d9914a9971fcdb913daaacf-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>","headings":[{"value":"Visualizing The Supply Chain Network Using Python","depth":2},{"value":"Using Plotly","depth":2}],"frontmatter":{"title":"Python Visualization","toc":null,"experimental":false}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.6/docs/supply_chain_toolkit/python_visualization.md","versioned":false,"version":"2.6","kind":"docs","pagePath":"/supply_chain_toolkit/python_visualization","chronology":{"prev":{"name":"Product","path":"/supply_chain_toolkit/product"},"next":{"name":"Supply Chain Platform","path":"/supply_chain_toolkit/supply_chain_platform"}},"lastUpdated":"2026-04-21T13:56:54.867Z"}}