{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "%matplotlib inline"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n# Node and Edge Legends\n\nLegends for node or edge properties can be created through the use of matplotlib proxy artists.\nFor a comprehensive guide, see the `matplotlib legend guide`_.\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import matplotlib.pyplot as plt\n\nfrom netgraph import Graph\n\ntriangle = [(0, 1), (1, 2), (2, 0)]\n\nnode_positions = {\n    0 : (0.2, 0.2),\n    1 : (0.5, 0.8),\n    2 : (0.8, 0.2),\n}\n\nnode_color = {\n    0 : 'tab:blue',\n    1 : 'tab:orange',\n    2 : 'tab:green',\n}\n\nnode_shape = {\n    0 : 's',\n    1 : '8',\n    2 : 'o',\n}\n\nnode_size = {\n    0 : 5,\n    1 : 10,\n    2 : 15,\n}\n\nedge_width = {\n    (0, 1) : 1,\n    (1, 2) : 2,\n    (2, 0) : 3,\n}\n\nedge_color = {\n    (0, 1) : 'tab:red',\n    (1, 2) : 'tab:purple',\n    (2, 0) : 'tab:brown'\n}\n\nfig, ax = plt.subplots()\ng = Graph(\n    triangle,\n    node_layout=node_positions,\n    node_labels=True,\n    edge_labels=True,\n    node_size=node_size,\n    node_color=node_color,\n    node_edge_color=node_color,\n    node_shape=node_shape,\n    edge_width=edge_width,\n    edge_color=edge_color,\n    ax=ax\n)\n\n# Create proxy artists for legend handles.\n\nnode_proxy_artists = []\nfor node in [0, 1, 2]:\n    proxy = plt.Line2D(\n        [], [],\n        linestyle='None',\n        color=node_color[node],\n        marker=node_shape[node],\n        markersize=node_size[node],\n        label=node\n    )\n    node_proxy_artists.append(proxy)\n\nnode_legend = ax.legend(handles=node_proxy_artists, loc='upper left', title='Nodes')\nax.add_artist(node_legend)\n\nedge_proxy_artists = []\nfor edge in triangle:\n    proxy = plt.Line2D(\n        [], [],\n        linestyle='-',\n        color=edge_color[edge],\n        linewidth=edge_width[edge],\n        label=edge\n    )\n    edge_proxy_artists.append(proxy)\n\nedge_legend = ax.legend(handles=edge_proxy_artists, loc='upper right', title='Edges')\nax.add_artist(edge_legend)\n\nplt.show()"
      ]
    }
  ],
  "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.9.12"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}