OSGeoLive-Notebooks/Shapely/shapely-pyplot-multilines.i...

139 lines
19 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot\n",
"from shapely.geometry import MultiLineString\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"\n",
"COLOR = {\n",
" True: '#6699cc',\n",
" False: '#ffcc33'\n",
" }\n",
"\n",
"def v_color(ob):\n",
" return COLOR[ob.is_simple]\n",
"\n",
"def plot_coords(ax, ob):\n",
" for line in ob:\n",
" x, y = line.xy\n",
" ax.plot(x, y, 'o', color='#999999', zorder=1)\n",
"\n",
"def plot_bounds(ax, ob):\n",
" x, y = zip(*list((p.x, p.y) for p in ob.boundary))\n",
" ax.plot(x, y, 'o', color='#000000', zorder=1)\n",
"\n",
"def plot_lines(ax, ob):\n",
" for line in ob:\n",
" x, y = line.xy\n",
" ax.plot(x, y, color=v_color(ob), alpha=0.7, linewidth=3, solid_capstyle='round', zorder=2)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x1800 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = pyplot.figure(1, figsize=(12,20), dpi=90)\n",
"\n",
"# 1: disconnected multilinestring\n",
"ax = fig.add_subplot(121)\n",
"\n",
"mline1 = MultiLineString([((0, 0), (1, 1)), ((0, 2), (1, 1.5), (1.5, 1), (2, 0))])\n",
"\n",
"plot_coords(ax, mline1)\n",
"plot_bounds(ax, mline1)\n",
"plot_lines(ax, mline1)\n",
"\n",
"ax.set_title('a) simple')\n",
"\n",
"xrange = [-1, 3]\n",
"yrange = [-1, 3]\n",
"ax.set_xlim(*xrange)\n",
"ax.set_xticks([-1, 0, 1, 2, 3])\n",
"ax.set_ylim(*yrange)\n",
"ax.set_yticks([-1, 0, 1, 2, 3])\n",
"ax.set_aspect(1)\n",
"\n",
"#2: invalid self-touching ring\n",
"ax = fig.add_subplot(122)\n",
"\n",
"mline2 = MultiLineString([((0, 0), (1, 1), (1.5, 1)), ((0, 2), (1, 1.5), (1.5, 1), (2, 0))])\n",
"\n",
"plot_coords(ax, mline2)\n",
"plot_bounds(ax, mline2)\n",
"plot_lines(ax, mline2)\n",
"\n",
"ax.set_title('b) complex')\n",
"\n",
"xrange = [-1, 3]\n",
"yrange = [-1, 3]\n",
"ax.set_xlim(*xrange)\n",
"ax.set_xticks([-1, 0, 1, 2, 3])\n",
"ax.set_ylim(*yrange)\n",
"ax.set_yticks([-1, 0, 1, 2, 3])\n",
"ax.set_aspect(1)\n",
"\n",
"pyplot.show()\n",
"\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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}