Skip to content

Instantly share code, notes, and snippets.

@proppy
Last active April 20, 2022 07:10
Show Gist options
  • Select an option

  • Save proppy/9c85cb06bbb016d7dcc968c9ba0bc060 to your computer and use it in GitHub Desktop.

Select an option

Save proppy/9c85cb06bbb016d7dcc968c9ba0bc060 to your computer and use it in GitHub Desktop.
gds_gis_playground.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/proppy/9c85cb06bbb016d7dcc968c9ba0bc060/gds_gis_playground.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"id": "70d9d73e",
"metadata": {
"id": "70d9d73e"
},
"source": [
"# GDS GIS Playground"
]
},
{
"cell_type": "code",
"source": [
"!pip install -q condacolab\n",
"import condacolab\n",
"condacolab.install_from_url(\"https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-Linux-x86_64.sh\")"
],
"metadata": {
"id": "RztoFfHIiDo0",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "ac1a36ef-6103-4e62-cf4d-0aa2b0116664"
},
"id": "RztoFfHIiDo0",
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"⏬ Downloading https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-Linux-x86_64.sh...\n",
"📦 Installing...\n",
"📌 Adjusting configuration...\n",
"🩹 Patching environment...\n",
"⏲ Done in 0:00:41\n",
"🔁 Restarting kernel...\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import condacolab\n",
"condacolab.check()\n",
"!sed -i -e /cudatoolkit/d /usr/local/conda-meta/pinned"
],
"metadata": {
"id": "xqj6NYdsiEaZ",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "2229a05d-8619-4ba6-eb75-db2e5e8d563e"
},
"id": "xqj6NYdsiEaZ",
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"✨🍰✨ Everything looks OK!\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"!conda install -c conda-forge --yes gdstk\n",
"!python -m pip install -U geopandas mapclassify"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Ca0Fhpcbigak",
"outputId": "13c6d72d-f8ad-4415-ae21-684d38530af4"
},
"id": "Ca0Fhpcbigak",
"execution_count": 13,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Collecting package metadata (current_repodata.json): - \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\bdone\n",
"Solving environment: / \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\bdone\n",
"\n",
"# All requested packages already installed.\n",
"\n",
"Requirement already satisfied: geopandas in /usr/local/lib/python3.7/site-packages (0.10.2)\n",
"Requirement already satisfied: mapclassify in /usr/local/lib/python3.7/site-packages (2.4.3)\n",
"Requirement already satisfied: shapely>=1.6 in /usr/local/lib/python3.7/site-packages (from geopandas) (1.8.1.post1)\n",
"Requirement already satisfied: fiona>=1.8 in /usr/local/lib/python3.7/site-packages (from geopandas) (1.8.21)\n",
"Requirement already satisfied: pandas>=0.25.0 in /usr/local/lib/python3.7/site-packages (from geopandas) (1.3.5)\n",
"Requirement already satisfied: pyproj>=2.2.0 in /usr/local/lib/python3.7/site-packages (from geopandas) (3.2.1)\n",
"Requirement already satisfied: numpy>=1.3 in /usr/local/lib/python3.7/site-packages (from mapclassify) (1.21.5)\n",
"Requirement already satisfied: scipy>=1.0 in /usr/local/lib/python3.7/site-packages (from mapclassify) (1.7.3)\n",
"Requirement already satisfied: scikit-learn in /usr/local/lib/python3.7/site-packages (from mapclassify) (1.0.2)\n",
"Requirement already satisfied: networkx in /usr/local/lib/python3.7/site-packages (from mapclassify) (2.6.3)\n",
"Requirement already satisfied: certifi in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (2021.10.8)\n",
"Requirement already satisfied: cligj>=0.5 in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (0.7.2)\n",
"Requirement already satisfied: click-plugins>=1.0 in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (1.1.1)\n",
"Requirement already satisfied: setuptools in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (58.0.4)\n",
"Requirement already satisfied: munch in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (2.5.0)\n",
"Requirement already satisfied: click>=4.0 in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (8.0.4)\n",
"Requirement already satisfied: attrs>=17 in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (21.4.0)\n",
"Requirement already satisfied: six>=1.7 in /usr/local/lib/python3.7/site-packages (from fiona>=1.8->geopandas) (1.16.0)\n",
"Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/site-packages (from click>=4.0->fiona>=1.8->geopandas) (4.11.3)\n",
"Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/site-packages (from pandas>=0.25.0->geopandas) (2.8.2)\n",
"Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/site-packages (from pandas>=0.25.0->geopandas) (2022.1)\n",
"Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/site-packages (from importlib-metadata->click>=4.0->fiona>=1.8->geopandas) (3.7.0)\n",
"Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/site-packages (from importlib-metadata->click>=4.0->fiona>=1.8->geopandas) (4.1.1)\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/site-packages (from scikit-learn->mapclassify) (3.1.0)\n",
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/site-packages (from scikit-learn->mapclassify) (1.1.0)\n",
"\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\n"
]
}
]
},
{
"cell_type": "markdown",
"id": "e4f83f6a",
"metadata": {
"id": "e4f83f6a"
},
"source": [
"## Read GDS and extract layers and datatypes"
]
},
{
"cell_type": "code",
"source": [
"!curl -L -O https://github.com/trilomix/GDS3D/raw/master/gds/example_sky130.gds"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2Vcv1jLNjUuj",
"outputId": "53a7f8e6-e244-4184-80a4-36ea81e090a6"
},
"id": "2Vcv1jLNjUuj",
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
" Dload Upload Total Spent Left Speed\n",
"100 144 100 144 0 0 521 0 --:--:-- --:--:-- --:--:-- 521\n",
"100 1008k 100 1008k 0 0 1568k 0 --:--:-- --:--:-- --:--:-- 1568k\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "544efad9",
"metadata": {
"id": "544efad9",
"outputId": "f86524e6-25c3-45d5-f858-7034de87d8c4",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 424
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Layer name Purpose GDS layer:datatype \\\n",
"0 diff drawing, text 65:20 \n",
"1 tap drawing 65:44 \n",
"2 nwell drawing 64:20 \n",
"3 dnwell drawing 64:18 \n",
"4 pwbm drawing 19:44 \n",
".. ... ... ... \n",
"264 cmm2 waffle drop 105:52 \n",
"265 cmm1 waffle drop 62:24 \n",
"266 cp1m waffle drop 33:24 \n",
"267 cfom waffle drop 22:24 \n",
"268 cmm5 waffle drop 117:4 \n",
"\n",
" Description GDS layer GDS datatype \n",
"0 Active (diffusion) area (type opposite of well... 65 20 \n",
"1 Active (diffusion) area (type equal to the wel... 65 44 \n",
"2 N-well region 64 20 \n",
"3 Deep n-well region 64 18 \n",
"4 Regions (in UHVI) blocked from p-well implant ... 19 44 \n",
".. ... ... ... \n",
"264 NaN 105 52 \n",
"265 NaN 62 24 \n",
"266 NaN 33 24 \n",
"267 NaN 22 24 \n",
"268 NaN 117 4 \n",
"\n",
"[269 rows x 6 columns]"
],
"text/html": [
"\n",
" <div id=\"df-3222026b-57a3-4769-8a7b-422e6aef646c\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Layer name</th>\n",
" <th>Purpose</th>\n",
" <th>GDS layer:datatype</th>\n",
" <th>Description</th>\n",
" <th>GDS layer</th>\n",
" <th>GDS datatype</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>diff</td>\n",
" <td>drawing, text</td>\n",
" <td>65:20</td>\n",
" <td>Active (diffusion) area (type opposite of well...</td>\n",
" <td>65</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>tap</td>\n",
" <td>drawing</td>\n",
" <td>65:44</td>\n",
" <td>Active (diffusion) area (type equal to the wel...</td>\n",
" <td>65</td>\n",
" <td>44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>nwell</td>\n",
" <td>drawing</td>\n",
" <td>64:20</td>\n",
" <td>N-well region</td>\n",
" <td>64</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>dnwell</td>\n",
" <td>drawing</td>\n",
" <td>64:18</td>\n",
" <td>Deep n-well region</td>\n",
" <td>64</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>pwbm</td>\n",
" <td>drawing</td>\n",
" <td>19:44</td>\n",
" <td>Regions (in UHVI) blocked from p-well implant ...</td>\n",
" <td>19</td>\n",
" <td>44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>264</th>\n",
" <td>cmm2</td>\n",
" <td>waffle drop</td>\n",
" <td>105:52</td>\n",
" <td>NaN</td>\n",
" <td>105</td>\n",
" <td>52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>265</th>\n",
" <td>cmm1</td>\n",
" <td>waffle drop</td>\n",
" <td>62:24</td>\n",
" <td>NaN</td>\n",
" <td>62</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>266</th>\n",
" <td>cp1m</td>\n",
" <td>waffle drop</td>\n",
" <td>33:24</td>\n",
" <td>NaN</td>\n",
" <td>33</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>267</th>\n",
" <td>cfom</td>\n",
" <td>waffle drop</td>\n",
" <td>22:24</td>\n",
" <td>NaN</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>268</th>\n",
" <td>cmm5</td>\n",
" <td>waffle drop</td>\n",
" <td>117:4</td>\n",
" <td>NaN</td>\n",
" <td>117</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>269 rows × 6 columns</p>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3222026b-57a3-4769-8a7b-422e6aef646c')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-3222026b-57a3-4769-8a7b-422e6aef646c button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-3222026b-57a3-4769-8a7b-422e6aef646c');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
]
},
"metadata": {},
"execution_count": 2
}
],
"source": [
"import gdstk\n",
"\n",
"lib = gdstk.read_gds('example_sky130.gds')\n",
"layers = lib.layers_and_datatypes()\n",
"layers\n",
"\n",
"import pandas as pd\n",
"df = pd.read_csv('https://raw.githubusercontent.com/google/skywater-pdk/main/docs/rules/gds_layers.csv')\n",
"df[['GDS layer', 'GDS datatype']] = df['GDS layer:datatype'].str.split(':', expand=True)\n",
"df"
]
},
{
"cell_type": "markdown",
"id": "e2571caf",
"metadata": {
"id": "e2571caf"
},
"source": [
"## Add each layer polygons to geopandas series"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "307cd0f3",
"metadata": {
"id": "307cd0f3",
"outputId": "b84ad541-0a48-458b-8ac1-3a0d3634d5d6",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[('mcon', 0 POLYGON ((34.645 126.565, 34.815 126.565, 34.8...\n",
" 1 POLYGON ((43.845 126.565, 44.015 126.565, 44.0...\n",
" 2 POLYGON ((48.905 126.565, 49.075 126.565, 49.0...\n",
" 3 POLYGON ((65.465 126.565, 65.635 126.565, 65.6...\n",
" 4 POLYGON ((98.125 126.565, 98.295 126.565, 98.2...\n",
" ... \n",
" 23900 POLYGON ((122.215 125.205, 122.045 125.205, 12...\n",
" 23901 POLYGON ((122.675 127.925, 122.505 127.925, 12...\n",
" 23902 POLYGON ((122.675 125.205, 122.505 125.205, 12...\n",
" 23903 POLYGON ((123.135 127.925, 122.965 127.925, 12...\n",
" 23904 POLYGON ((123.135 125.205, 122.965 125.205, 12...\n",
" Length: 23905, dtype: geometry),\n",
" ('tap', 0 POLYGON ((19.925 13.280, 20.095 13.280, 20.095...\n",
" 1 POLYGON ((19.925 12.075, 20.095 12.075, 20.095...\n",
" 2 POLYGON ((33.725 13.920, 33.895 13.920, 33.895...\n",
" 3 POLYGON ((33.725 15.125, 33.895 15.125, 33.895...\n",
" 4 POLYGON ((34.185 13.280, 34.355 13.280, 34.355...\n",
" ... \n",
" 355 POLYGON ((91.225 126.315, 91.395 126.315, 91.3...\n",
" 356 POLYGON ((105.485 127.520, 105.655 127.520, 10...\n",
" 357 POLYGON ((105.485 126.315, 105.655 126.315, 10...\n",
" 358 POLYGON ((119.745 127.520, 119.915 127.520, 11...\n",
" 359 POLYGON ((119.745 126.315, 119.915 126.315, 11...\n",
" Length: 360, dtype: geometry),\n",
" ('psdm', 0 POLYGON ((12.420 15.085, 17.940 15.085, 17.940...\n",
" 1 POLYGON ((6.900 15.085, 12.420 15.085, 12.420 ...\n",
" 2 POLYGON ((12.420 12.115, 17.940 12.115, 17.940...\n",
" 3 POLYGON ((6.900 12.115, 12.420 12.115, 12.420 ...\n",
" 4 POLYGON ((5.520 15.085, 6.900 15.085, 6.900 16...\n",
" ... \n",
" 1713 POLYGON ((120.060 126.355, 121.900 126.355, 12...\n",
" 1714 POLYGON ((116.840 126.355, 119.600 126.355, 11...\n",
" 1715 POLYGON ((119.600 127.650, 120.060 127.650, 12...\n",
" 1716 POLYGON ((119.600 125.310, 120.060 125.310, 12...\n",
" 1717 POLYGON ((123.280 126.355, 121.900 126.355, 12...\n",
" Length: 1718, dtype: geometry),\n",
" ('poly', 0 POLYGON ((17.545 16.215, 12.815 16.215, 12.815...\n",
" 1 POLYGON ((17.545 14.875, 15.275 14.875, 15.275...\n",
" 2 POLYGON ((12.025 16.215, 7.295 16.215, 7.295 1...\n",
" 3 POLYGON ((12.025 14.875, 9.755 14.875, 9.755 1...\n",
" 4 POLYGON ((17.545 10.985, 12.815 10.985, 12.815...\n",
" ... \n",
" 3813 POLYGON ((121.795 126.565, 121.085 126.565, 12...\n",
" 3814 POLYGON ((119.205 125.225, 117.235 125.225, 11...\n",
" 3815 POLYGON ((119.205 126.565, 118.325 126.565, 11...\n",
" 3816 POLYGON ((122.155 126.585, 122.485 126.585, 12...\n",
" 3817 POLYGON ((122.295 125.225, 122.885 125.225, 12...\n",
" Length: 3818, dtype: geometry),\n",
" ('met1', 0 POLYGON ((12.565 13.515, 12.735 13.515, 12.735...\n",
" 1 POLYGON ((12.565 16.235, 12.735 16.235, 12.735...\n",
" 2 POLYGON ((7.045 13.515, 7.215 13.515, 7.215 13...\n",
" 3 POLYGON ((7.045 16.235, 7.215 16.235, 7.215 16...\n",
" 4 POLYGON ((12.565 13.685, 12.735 13.685, 12.735...\n",
" ... \n",
" 3071 POLYGON ((116.985 127.925, 117.155 127.925, 11...\n",
" 3072 POLYGON ((119.705 127.930, 119.960 127.930, 11...\n",
" 3073 POLYGON ((119.710 125.220, 119.975 125.220, 11...\n",
" 3074 POLYGON ((123.135 125.205, 122.965 125.205, 12...\n",
" 3075 POLYGON ((123.135 127.925, 122.965 127.925, 12...\n",
" Length: 3076, dtype: geometry),\n",
" ('hvtp', 0 POLYGON ((12.420 14.850, 17.940 14.850, 17.940...\n",
" 1 POLYGON ((6.900 14.850, 12.420 14.850, 12.420 ...\n",
" 2 POLYGON ((12.420 12.350, 17.940 12.350, 17.940...\n",
" 3 POLYGON ((6.900 12.350, 12.420 12.350, 12.420 ...\n",
" 4 POLYGON ((5.520 14.850, 6.900 14.850, 6.900 16...\n",
" ... \n",
" 1725 POLYGON ((105.340 126.590, 105.800 126.590, 10...\n",
" 1726 POLYGON ((120.060 126.590, 121.900 126.590, 12...\n",
" 1727 POLYGON ((116.840 126.590, 119.600 126.590, 11...\n",
" 1728 POLYGON ((119.600 126.590, 120.060 126.590, 12...\n",
" 1729 POLYGON ((123.280 126.590, 121.900 126.590, 12...\n",
" Length: 1730, dtype: geometry),\n",
" ('met1', 0 POLYGON ((5.520 127.600, 123.280 127.600, 123....\n",
" 1 POLYGON ((34.570 126.720, 34.890 126.720, 34.8...\n",
" 2 POLYGON ((43.785 126.720, 44.075 126.720, 44.0...\n",
" 3 POLYGON ((48.370 126.720, 48.690 126.720, 48.6...\n",
" 4 POLYGON ((34.570 126.580, 35.085 126.580, 35.0...\n",
" ... \n",
" 9198 POLYGON ((116.840 127.600, 116.840 128.080, 11...\n",
" 9199 POLYGON ((119.600 128.080, 120.060 128.080, 12...\n",
" 9200 POLYGON ((119.600 125.360, 120.060 125.360, 12...\n",
" 9201 POLYGON ((123.280 124.880, 123.280 125.360, 12...\n",
" 9202 POLYGON ((123.280 127.600, 123.280 128.080, 12...\n",
" Length: 9203, dtype: geometry),\n",
" ('areaid.sc', 0 POLYGON ((12.420 13.600, 17.940 13.600, 17.940...\n",
" 1 POLYGON ((6.900 13.600, 12.420 13.600, 12.420 ...\n",
" 2 POLYGON ((12.420 13.600, 17.940 13.600, 17.940...\n",
" 3 POLYGON ((6.900 13.600, 12.420 13.600, 12.420 ...\n",
" 4 POLYGON ((5.520 13.600, 6.900 13.600, 6.900 16...\n",
" ... \n",
" 1533 POLYGON ((105.340 127.840, 105.800 127.840, 10...\n",
" 1534 POLYGON ((120.060 127.840, 121.900 127.840, 12...\n",
" 1535 POLYGON ((116.840 127.840, 119.600 127.840, 11...\n",
" 1536 POLYGON ((119.600 127.840, 120.060 127.840, 12...\n",
" 1537 POLYGON ((123.280 127.840, 121.900 127.840, 12...\n",
" Length: 1538, dtype: geometry),\n",
" ('met3', 0 POLYGON ((0.000 38.120, 4.000 38.120, 4.000 38...\n",
" 1 POLYGON ((124.805 13.640, 128.805 13.640, 128....\n",
" 2 POLYGON ((0.000 73.480, 4.000 73.480, 4.000 74...\n",
" 3 POLYGON ((124.805 31.320, 128.805 31.320, 128....\n",
" 4 POLYGON ((0.000 55.800, 4.000 55.800, 4.000 56...\n",
" 5 POLYGON ((124.805 118.360, 128.805 118.360, 12...\n",
" 6 POLYGON ((0.000 91.160, 4.000 91.160, 4.000 91...\n",
" 7 POLYGON ((124.805 100.680, 128.805 100.680, 12...\n",
" 8 POLYGON ((0.000 107.480, 4.000 107.480, 4.000 ...\n",
" 9 POLYGON ((124.805 83.000, 128.805 83.000, 128....\n",
" 10 POLYGON ((0.000 20.440, 4.000 20.440, 4.000 21...\n",
" 11 POLYGON ((124.805 47.640, 128.805 47.640, 128....\n",
" 12 POLYGON ((124.805 65.320, 128.805 65.320, 128....\n",
" 13 POLYGON ((0.000 125.160, 4.000 125.160, 4.000 ...\n",
" dtype: geometry),\n",
" ('via3', 0 POLYGON ((44.070 127.740, 44.270 127.740, 44.2...\n",
" 1 POLYGON ((44.470 127.740, 44.670 127.740, 44.6...\n",
" 2 POLYGON ((44.870 127.740, 45.070 127.740, 45.0...\n",
" 3 POLYGON ((45.270 127.740, 45.470 127.740, 45.4...\n",
" 4 POLYGON ((83.325 127.740, 83.525 127.740, 83.5...\n",
" ... \n",
" 435 POLYGON ((64.900 10.780, 65.100 10.780, 65.100...\n",
" 436 POLYGON ((102.950 10.780, 103.150 10.780, 103....\n",
" 437 POLYGON ((103.350 10.780, 103.550 10.780, 103....\n",
" 438 POLYGON ((103.750 10.780, 103.950 10.780, 103....\n",
" 439 POLYGON ((104.150 10.780, 104.350 10.780, 104....\n",
" Length: 440, dtype: geometry),\n",
" ('prBndry', 0 POLYGON ((0.000 0.000, 128.805 0.000, 128.805 ...\n",
" dtype: geometry),\n",
" ('via4', 0 POLYGON ((24.745 107.705, 25.545 107.705, 25.5...\n",
" 1 POLYGON ((64.000 107.705, 64.800 107.705, 64.8...\n",
" 2 POLYGON ((103.250 107.705, 104.050 107.705, 10...\n",
" 3 POLYGON ((44.370 88.210, 45.170 88.210, 45.170...\n",
" 4 POLYGON ((83.625 88.210, 84.425 88.210, 84.425...\n",
" 5 POLYGON ((24.745 68.720, 25.545 68.720, 25.545...\n",
" 6 POLYGON ((64.000 68.720, 64.800 68.720, 64.800...\n",
" 7 POLYGON ((103.250 68.720, 104.050 68.720, 104....\n",
" 8 POLYGON ((44.370 49.225, 45.170 49.225, 45.170...\n",
" 9 POLYGON ((83.625 49.225, 84.425 49.225, 84.425...\n",
" 10 POLYGON ((24.745 29.730, 25.545 29.730, 25.545...\n",
" 11 POLYGON ((64.000 29.730, 64.800 29.730, 64.800...\n",
" 12 POLYGON ((103.250 29.730, 104.050 29.730, 104....\n",
" dtype: geometry),\n",
" ('met3', 0 POLYGON ((43.970 127.675, 45.570 127.675, 45.5...\n",
" 1 POLYGON ((83.225 127.675, 84.825 127.675, 84.8...\n",
" 2 POLYGON ((0.000 125.610, 4.000 125.610, 4.000 ...\n",
" 3 POLYGON ((16.625 125.610, 16.955 125.610, 16.9...\n",
" 4 POLYGON ((0.000 125.310, 16.955 125.310, 16.95...\n",
" ... \n",
" 185 POLYGON ((83.225 13.435, 84.825 13.435, 84.825...\n",
" 186 POLYGON ((124.805 13.640, 128.805 13.640, 128....\n",
" 187 POLYGON ((24.345 10.715, 25.945 10.715, 25.945...\n",
" 188 POLYGON ((63.600 10.715, 65.200 10.715, 65.200...\n",
" 189 POLYGON ((102.850 10.715, 104.450 10.715, 104....\n",
" Length: 190, dtype: geometry),\n",
" ('met2', 0 POLYGON ((7.450 135.525, 7.730 135.525, 7.730 ...\n",
" 1 POLYGON ((19.410 135.525, 19.690 135.525, 19.6...\n",
" 2 POLYGON ((31.370 135.525, 31.650 135.525, 31.6...\n",
" 3 POLYGON ((43.330 135.525, 43.610 135.525, 43.6...\n",
" 4 POLYGON ((54.370 135.525, 54.650 135.525, 54.6...\n",
" ... \n",
" 2261 POLYGON ((73.690 0.000, 73.970 0.000, 73.970 4...\n",
" 2262 POLYGON ((84.730 0.000, 85.010 0.000, 85.010 4...\n",
" 2263 POLYGON ((96.690 0.000, 96.970 0.000, 96.970 4...\n",
" 2264 POLYGON ((108.650 0.000, 108.930 0.000, 108.93...\n",
" 2265 POLYGON ((120.610 0.000, 120.890 0.000, 120.89...\n",
" Length: 2266, dtype: geometry),\n",
" ('via', 0 POLYGON ((44.215 127.765, 44.365 127.765, 44.3...\n",
" 1 POLYGON ((44.535 127.765, 44.685 127.765, 44.6...\n",
" 2 POLYGON ((44.855 127.765, 45.005 127.765, 45.0...\n",
" 3 POLYGON ((45.175 127.765, 45.325 127.765, 45.3...\n",
" 4 POLYGON ((83.470 127.765, 83.620 127.765, 83.6...\n",
" ... \n",
" 1690 POLYGON ((64.805 10.805, 64.955 10.805, 64.955...\n",
" 1691 POLYGON ((103.095 10.805, 103.245 10.805, 103....\n",
" 1692 POLYGON ((103.415 10.805, 103.565 10.805, 103....\n",
" 1693 POLYGON ((103.735 10.805, 103.885 10.805, 103....\n",
" 1694 POLYGON ((104.055 10.805, 104.205 10.805, 104....\n",
" Length: 1695, dtype: geometry),\n",
" ('licon1', 0 POLYGON ((12.595 15.855, 12.765 15.855, 12.765...\n",
" 1 POLYGON ((17.275 14.625, 17.445 14.625, 17.445...\n",
" 2 POLYGON ((17.595 15.855, 17.765 15.855, 17.765...\n",
" 3 POLYGON ((17.595 15.345, 17.765 15.345, 17.765...\n",
" 4 POLYGON ((17.595 13.990, 17.765 13.990, 17.765...\n",
" ... \n",
" 25343 POLYGON ((122.405 126.835, 122.235 126.835, 12...\n",
" 25344 POLYGON ((122.945 126.635, 122.775 126.635, 12...\n",
" 25345 POLYGON ((123.105 127.440, 122.935 127.440, 12...\n",
" 25346 POLYGON ((123.105 126.060, 122.935 126.060, 12...\n",
" 25347 POLYGON ((123.105 125.585, 122.935 125.585, 12...\n",
" Length: 25348, dtype: geometry),\n",
" ('npc', 0 POLYGON ((12.420 14.525, 17.940 14.525, 17.940...\n",
" 1 POLYGON ((6.900 14.525, 12.420 14.525, 12.420 ...\n",
" 2 POLYGON ((12.420 12.675, 17.940 12.675, 17.940...\n",
" 3 POLYGON ((6.900 12.675, 12.420 12.675, 12.420 ...\n",
" 4 POLYGON ((6.900 14.945, 6.125 14.945, 6.125 15...\n",
" ... \n",
" 1236 POLYGON ((111.320 126.915, 116.840 126.915, 11...\n",
" 1237 POLYGON ((105.800 126.915, 111.320 126.915, 11...\n",
" 1238 POLYGON ((121.900 126.495, 120.515 126.495, 12...\n",
" 1239 POLYGON ((119.600 126.495, 118.135 126.495, 11...\n",
" 1240 POLYGON ((121.900 126.495, 122.675 126.495, 12...\n",
" Length: 1241, dtype: geometry),\n",
" ('unamed', 0 POLYGON ((12.420 13.600, 17.940 13.600, 17.940...\n",
" 1 POLYGON ((6.900 13.600, 12.420 13.600, 12.420 ...\n",
" 2 POLYGON ((12.420 13.600, 17.940 13.600, 17.940...\n",
" 3 POLYGON ((6.900 13.600, 12.420 13.600, 12.420 ...\n",
" 4 POLYGON ((5.520 13.600, 6.900 13.600, 6.900 16...\n",
" ... \n",
" 1172 POLYGON ((111.320 127.840, 116.840 127.840, 11...\n",
" 1173 POLYGON ((105.800 127.840, 111.320 127.840, 11...\n",
" 1174 POLYGON ((120.060 127.840, 121.900 127.840, 12...\n",
" 1175 POLYGON ((116.840 127.840, 119.600 127.840, 11...\n",
" 1176 POLYGON ((123.280 127.840, 121.900 127.840, 12...\n",
" Length: 1177, dtype: geometry),\n",
" ('nwell', 0 POLYGON ((12.230 14.905, 18.130 14.905, 18.130...\n",
" 1 POLYGON ((6.710 14.905, 12.610 14.905, 12.610 ...\n",
" 2 POLYGON ((12.230 12.295, 18.130 12.295, 18.130...\n",
" 3 POLYGON ((6.710 12.295, 12.610 12.295, 12.610 ...\n",
" 4 POLYGON ((5.330 14.905, 7.090 14.905, 7.090 16...\n",
" ... \n",
" 1533 POLYGON ((105.150 126.535, 105.990 126.535, 10...\n",
" 1534 POLYGON ((119.870 126.535, 122.090 126.535, 12...\n",
" 1535 POLYGON ((116.650 126.535, 119.790 126.535, 11...\n",
" 1536 POLYGON ((119.410 126.535, 120.250 126.535, 12...\n",
" 1537 POLYGON ((123.470 126.535, 121.710 126.535, 12...\n",
" Length: 1538, dtype: geometry),\n",
" ('via2', 0 POLYGON ((44.070 127.740, 44.270 127.740, 44.2...\n",
" 1 POLYGON ((44.470 127.740, 44.670 127.740, 44.6...\n",
" 2 POLYGON ((44.870 127.740, 45.070 127.740, 45.0...\n",
" 3 POLYGON ((45.270 127.740, 45.470 127.740, 45.4...\n",
" 4 POLYGON ((83.325 127.740, 83.525 127.740, 83.5...\n",
" ... \n",
" 453 POLYGON ((64.900 10.780, 65.100 10.780, 65.100...\n",
" 454 POLYGON ((102.950 10.780, 103.150 10.780, 103....\n",
" 455 POLYGON ((103.350 10.780, 103.550 10.780, 103....\n",
" 456 POLYGON ((103.750 10.780, 103.950 10.780, 103....\n",
" 457 POLYGON ((104.150 10.780, 104.350 10.780, 104....\n",
" Length: 458, dtype: geometry),\n",
" ('nsdm', 0 POLYGON ((12.420 13.410, 17.940 13.410, 17.940...\n",
" 1 POLYGON ((6.900 13.410, 12.420 13.410, 12.420 ...\n",
" 2 POLYGON ((12.420 13.790, 17.940 13.790, 17.940...\n",
" 3 POLYGON ((6.900 13.790, 12.420 13.790, 12.420 ...\n",
" 4 POLYGON ((5.520 13.410, 6.900 13.410, 6.900 14...\n",
" ... \n",
" 1713 POLYGON ((120.060 128.030, 121.900 128.030, 12...\n",
" 1714 POLYGON ((116.840 128.030, 119.600 128.030, 11...\n",
" 1715 POLYGON ((119.600 128.030, 120.060 128.030, 12...\n",
" 1716 POLYGON ((119.600 126.445, 120.060 126.445, 12...\n",
" 1717 POLYGON ((123.280 128.030, 121.900 128.030, 12...\n",
" Length: 1718, dtype: geometry),\n",
" ('nwell', 0 POLYGON ((12.565 16.235, 12.735 16.235, 12.735...\n",
" 1 POLYGON ((7.045 16.235, 7.215 16.235, 7.215 16...\n",
" 2 POLYGON ((12.565 10.965, 12.735 10.965, 12.735...\n",
" 3 POLYGON ((7.045 10.965, 7.215 10.965, 7.215 10...\n",
" 4 POLYGON ((5.665 16.235, 5.835 16.235, 5.835 16...\n",
" ... \n",
" 1354 POLYGON ((105.945 125.205, 106.115 125.205, 10...\n",
" 1355 POLYGON ((105.035 125.170, 105.135 125.170, 10...\n",
" 1356 POLYGON ((120.205 125.205, 120.375 125.205, 12...\n",
" 1357 POLYGON ((116.985 125.205, 117.155 125.205, 11...\n",
" 1358 POLYGON ((123.135 125.205, 122.965 125.205, 12...\n",
" Length: 1359, dtype: geometry),\n",
" ('met5', 0 POLYGON ((5.52000 29.33500, 123.28000 29.33500...\n",
" 1 POLYGON ((5.52000 48.82500, 123.28000 48.82500...\n",
" dtype: geometry),\n",
" ('diff', 0 POLYGON ((12.555 15.215, 17.805 15.215, 17.805...\n",
" 1 POLYGON ((12.555 13.835, 17.805 13.835, 17.805...\n",
" 2 POLYGON ((7.035 15.215, 12.285 15.215, 12.285 ...\n",
" 3 POLYGON ((7.035 13.835, 12.285 13.835, 12.285 ...\n",
" 4 POLYGON ((12.555 11.985, 17.805 11.985, 17.805...\n",
" ... \n",
" 2920 POLYGON ((120.195 127.605, 121.765 127.605, 12...\n",
" 2921 POLYGON ((116.975 126.225, 119.465 126.225, 11...\n",
" 2922 POLYGON ((116.975 127.605, 119.465 127.605, 11...\n",
" 2923 POLYGON ((123.145 127.605, 122.035 127.605, 12...\n",
" 2924 POLYGON ((123.145 126.225, 122.035 126.225, 12...\n",
" Length: 2925, dtype: geometry),\n",
" ('met4', 0 POLYGON ((24.345 10.640, 25.945 10.640, 25.945...\n",
" 1 POLYGON ((43.970 10.640, 45.570 10.640, 45.570...\n",
" 2 POLYGON ((63.600 10.640, 65.200 10.640, 65.200...\n",
" 3 POLYGON ((83.225 10.640, 84.825 10.640, 84.825...\n",
" 4 POLYGON ((102.850 10.640, 104.450 10.640, 104....\n",
" dtype: geometry),\n",
" ('met2', 0 POLYGON ((102.210 135.525, 102.490 135.525, 10...\n",
" 1 POLYGON ((73.690 0.000, 73.970 0.000, 73.970 4...\n",
" 2 POLYGON ((13.890 0.000, 14.170 0.000, 14.170 4...\n",
" 3 POLYGON ((2.850 0.000, 3.130 0.000, 3.130 4.00...\n",
" 4 POLYGON ((108.650 0.000, 108.930 0.000, 108.93...\n",
" 5 POLYGON ((37.810 0.000, 38.090 0.000, 38.090 4...\n",
" 6 POLYGON ((54.370 135.525, 54.650 135.525, 54.6...\n",
" 7 POLYGON ((19.410 135.525, 19.690 135.525, 19.6...\n",
" 8 POLYGON ((78.290 135.525, 78.570 135.525, 78.5...\n",
" 9 POLYGON ((120.610 0.000, 120.890 0.000, 120.89...\n",
" 10 POLYGON ((25.850 0.000, 26.130 0.000, 26.130 4...\n",
" 11 POLYGON ((114.170 135.525, 114.450 135.525, 11...\n",
" 12 POLYGON ((43.330 135.525, 43.610 135.525, 43.6...\n",
" 13 POLYGON ((96.690 0.000, 96.970 0.000, 96.970 4...\n",
" 14 POLYGON ((61.730 0.000, 62.010 0.000, 62.010 4...\n",
" 15 POLYGON ((7.450 135.525, 7.730 135.525, 7.730 ...\n",
" 16 POLYGON ((90.250 135.525, 90.530 135.525, 90.5...\n",
" 17 POLYGON ((84.730 0.000, 85.010 0.000, 85.010 4...\n",
" 18 POLYGON ((66.330 135.525, 66.610 135.525, 66.6...\n",
" 19 POLYGON ((31.370 135.525, 31.650 135.525, 31.6...\n",
" 20 POLYGON ((125.210 135.525, 125.490 135.525, 12...\n",
" 21 POLYGON ((49.770 0.000, 50.050 0.000, 50.050 4...\n",
" dtype: geometry),\n",
" ('li1', 0 POLYGON ((34.645 126.565, 34.815 126.565, 34.8...\n",
" 1 POLYGON ((43.845 126.565, 44.015 126.565, 44.0...\n",
" 2 POLYGON ((48.905 126.565, 49.075 126.565, 49.0...\n",
" 3 POLYGON ((65.465 126.565, 65.635 126.565, 65.6...\n",
" 4 POLYGON ((98.125 126.565, 98.295 126.565, 98.2...\n",
" ... \n",
" 8602 POLYGON ((119.685 126.370, 119.975 126.370, 11...\n",
" 8603 POLYGON ((119.600 125.205, 120.060 125.205, 12...\n",
" 8604 POLYGON ((119.600 127.925, 120.060 127.925, 12...\n",
" 8605 POLYGON ((121.900 125.035, 123.280 125.035, 12...\n",
" 8606 POLYGON ((121.900 127.755, 121.985 127.755, 12...\n",
" Length: 8607, dtype: geometry),\n",
" ('met5', 0 POLYGON ((5.520 107.305, 123.280 107.305, 123....\n",
" 1 POLYGON ((5.520 87.810, 123.280 87.810, 123.28...\n",
" 2 POLYGON ((5.520 68.320, 123.280 68.320, 123.28...\n",
" 3 POLYGON ((5.520 48.825, 123.280 48.825, 123.28...\n",
" 4 POLYGON ((5.520 29.330, 123.280 29.330, 123.28...\n",
" dtype: geometry),\n",
" ('li1', 0 POLYGON ((36.485 15.045, 36.655 15.045, 36.655...\n",
" 1 POLYGON ((39.245 14.365, 39.415 14.365, 39.415...\n",
" 2 POLYGON ((36.945 14.705, 37.115 14.705, 37.115...\n",
" 3 POLYGON ((43.390 14.705, 43.560 14.705, 43.560...\n",
" 4 POLYGON ((44.310 14.705, 44.480 14.705, 44.480...\n",
" ... \n",
" 2332 POLYGON ((100.905 126.735, 101.075 126.735, 10...\n",
" 2333 POLYGON ((97.225 126.735, 97.395 126.735, 97.3...\n",
" 2334 POLYGON ((98.145 126.735, 98.315 126.735, 98.3...\n",
" 2335 POLYGON ((99.985 126.735, 100.155 126.735, 100...\n",
" 2336 POLYGON ((94.905 126.735, 95.075 126.735, 95.0...\n",
" Length: 2337, dtype: geometry),\n",
" ('pwell', 0 POLYGON ((12.565 13.515, 12.735 13.515, 12.735...\n",
" 1 POLYGON ((7.045 13.515, 7.215 13.515, 7.215 13...\n",
" 2 POLYGON ((12.565 13.685, 12.735 13.685, 12.735...\n",
" 3 POLYGON ((7.045 13.685, 7.215 13.685, 7.215 13...\n",
" 4 POLYGON ((5.665 13.515, 5.835 13.515, 5.835 13...\n",
" ... \n",
" 1354 POLYGON ((105.945 127.925, 106.115 127.925, 10...\n",
" 1355 POLYGON ((105.020 127.895, 105.140 127.895, 10...\n",
" 1356 POLYGON ((120.205 127.925, 120.375 127.925, 12...\n",
" 1357 POLYGON ((116.985 127.925, 117.155 127.925, 11...\n",
" 1358 POLYGON ((123.135 127.925, 122.965 127.925, 12...\n",
" Length: 1359, dtype: geometry)]"
]
},
"metadata": {},
"execution_count": 3
}
],
"source": [
"import shapely.geometry\n",
"import geopandas\n",
"\n",
"def layer_to_polygons(cell, layer):\n",
" for p in cell.get_polygons(layer=layer[0], datatype=layer[1]):\n",
" yield shapely.geometry.Polygon(p.points)\n",
"\n",
"def layers_to_series(lib):\n",
" top = lib.top_level()[0]\n",
" for l in lib.layers_and_datatypes():\n",
" name_lookup = df[(df['GDS layer'] == str(l[0])) & (df['GDS datatype'] == str(l[1]))]['Layer name']\n",
" name = name_lookup.values[0] if len(name_lookup.values) > 0 else 'unamed'\n",
" yield name, geopandas.GeoSeries(layer_to_polygons(top, l))\n",
"\n",
"series = list(layers_to_series(lib))\n",
"series"
]
},
{
"cell_type": "markdown",
"id": "73220ce0",
"metadata": {
"id": "73220ce0"
},
"source": [
"## Plot each layers"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "16491658",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 741
},
"id": "16491658",
"outputId": "2e09f366-fc29-4fc4-e4b2-dc4aa986f89f"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 720x720 with 30 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"fig, axs = plt.subplots(6, 5, sharex=True, sharey=True, figsize=(10, 10))\n",
"fig.tight_layout()\n",
"for (name, serie), ax in zip(series, axs.flatten()):\n",
" ax.set_title(name)\n",
" serie.plot(ax=ax)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "c5b8c54a",
"metadata": {
"id": "c5b8c54a"
},
"source": [
"## Explore one of the layer"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4d6df6e2",
"metadata": {
"id": "4d6df6e2",
"outputId": "a85b173f-2cca-4cc7-f3a8-63c23bb7502e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 916
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<folium.folium.Map at 0x7fda09fde3d0>"
],
"text/html": [
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment