{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "In this post, we're going to try to understand and get some intuition about the `networkx` spring layout algorithm." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# A simple example " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's start with a simple graph." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import networkx as nx" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "G = nx.Graph()\n", "G.add_node(0)\n", "G.add_node(1)\n", "G.add_node(2)\n", "G.add_node(3)\n", "G.add_edge(0, 1)\n", "G.add_edge(0, 3)\n", "G.add_edge(2, 3)\n", "G.add_edge(0, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can represent this network visually using the `nx.draw_xxx` commands. For instance, we can randomly place the nodes:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:124: MatplotlibDeprecationWarning: pyplot.hold is deprecated.\n", " Future behavior will be consistent with the long-time default:\n", " plot commands add elements without first clearing the\n", " Axes and/or Figure.\n", " b = plt.ishold()\n", "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:136: MatplotlibDeprecationWarning: pyplot.hold is deprecated.\n", " Future behavior will be consistent with the long-time default:\n", " plot commands add elements without first clearing the\n", " Axes and/or Figure.\n", " plt.hold(b)\n", "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.py:917: UserWarning: axes.hold is deprecated. Please remove it from your matplotlibrc and/or style files.\n", " warnings.warn(self.msg_depr_set % key)\n", "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\rcsetup.py:152: UserWarning: axes.hold is deprecated, will be removed in 3.0\n", " warnings.warn(\"axes.hold is deprecated, will be removed in 3.0\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFCCAYAAABSJMy8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8zvX/x/HHtfPBrIWQw5x+jlkJO2AzbDaHayds14Yi\nOkjHX31Fyq/0RaFShJJDiE1ITotNbJWS6lskHZRDDmGOYRHb74+Vb7Kxw/W5rm3X8367ud3qut6f\n1/vV7dbt9nR93u/P+2PKz8/PR0RERKzKyd4NiIiIVEYKWBEREQMoYEVERAyggBURETGAAlZERMQA\nClgREREDKGBFREQMoIAVERExgAJWRETEAApYERERAyhgRUREDKCAFRERMYACVkRExAAKWBEREQMo\nYEVERAyggBURETGAAlZERMQAClgREREDKGBFREQMoIAVERExgAJWRETEAApYERERAyhgRUREDKCA\nFRERMYACVkRExAAKWBEREQMoYEVERAyggBURETGAAlZERMQAClgREREDKGBFREQMoIAVERExgIu9\nG5BK7sgRmDcPtm2DU6fA1xcCAmDwYKhRw97diYgYxpSfn59v7yakEtq6FSZMgPT0gn///ff/fufp\nCfn50KMHjBoF7dvbpieFvYjYkAJWrG/GDHj8ccjNLQjSophMBWE7eTIMG2ZcP+Ux7EWk0lPAinX9\nFa7nzhX/Gi8v40K2vIW9iDgMBaxYz9atEB5+VbgeB4YA64HqwAQg5Z/XenlBVha0a2e9fspb2IuI\nQ1HAivUkJMCKFVf9UkwG8oDZwFdAL2Az0Orvg0wmiI+HZcus00sRYV8sRoS9iDgcPaYj1nHkSMEa\n5z/C9SywDHgOqAJ0AmKBBf+8Pj8f1q6Fo0et08+ECQW3hf/mPAW/pP0BH+A2IL2wa3NzC64XESkD\nBaxYx7x5hX78AwXPgjX922e3AjsKG2wyFVmnRIoI+4tAPSALOAX8G0gE9vzzemuHvYg4JAWsWMe2\nbVfuzv3TGaDqPz6rCvxWWI3cXE5++CG7d+/m0KFDnDhxgtzcXPLy8krWSxEh7Q08AzSg4H/83kBD\n4IvCBlsr7EXEYemgCbGOU6cK/bgKcPqfQym4RVuY/3zwAXd17crvv/9+xR83Nzc8PDyK9eehrVvp\nWEjY/9NhCn5htyrsy9xc2L79ujVERIqigBXr8PUt9OOmFNya/RH4nz8/+5oiQg3okpDA7vnzr/gs\nPz+fCxcuXBW6Rf2p//331233D6A/cCfQvKhBJ05ct46ISFEUsFIm+fn5bN++nQMHDxJuMuH5j3VP\nbyABGAO8CfwHWEnBLuKreHpC69ZXfWwymXB3d8fd3R3fIoL8CqtWwddfF/l1HjAQcAOmXauOn9/1\n5xIRKYLWYKVUvv/+e8aOHUurVq0wm81sbdkSd1fXQsdOB3KBmyh4/nUGRfyCzc+HQYPK3lxAAHh4\nFPpVPgU7iQ9TsLu58I4pMuxFRIpLz8FKse3Zs4e0tDRSU1M5fPgw/fr1w2KxEBwcjMlkKvI52GKx\n5nOwR46Av3+hm67uo+BZ3EwK1oeL5OEB+/bpjGIRKTUFrFzTwYMHeeedd0hNTWXXrl306dMHi8VC\naGgozs7OVw4uw+EOF1xdcf34Y0zWOgu4kLDfS8EOYneuXBt5nYL12MusfeiFiDgkBaxc5ejRoyxb\ntozU1FS2bdtGbGwsSUlJdOvWDdcibgNfVorjCfM8PZlUsyZfBgYyd+5cvLy8yvhfgE5yEhG70xqs\nAHDy5Enmzp1LVFQUTZo0ISsri0cffZSDBw8yd+5coqOjrx+uUHCG7+TJBSFlMl17rMkEXl44vfgi\nD+/ciZubG2FhYRw4cKDs/0Ht2/+3jxI4B3yRkqJwFZEyU8A6sDNnzrB48WJiY2Px9/dn1apVDBky\nhIMHD17+3KOIzULXNGxYwS/A+PiCtUxPzyu/9/Qs+Dw+vmDcsGF4eHgwf/58+vXrR1BQEJ999lnZ\n/wNLEfbHR4/GvGYNc+fOLfv8IuLQdIvYweTm5pKenk5qairr1q2jU6dOJCUlERsbW7xHYErq6NGC\nE5G2by94rtTPr2B37qBBRW4gWrlyJUOGDOHVV18lOTm57D18/nnB2cJr1xYE6d/PKP7rfbA9exa8\nD7ZdO77//nsiIyN5/PHHeeihh8o+v4g4JAWsA7hw4QIZGRmkpqayevVqbr/9diwWCwkJCVSrVs3e\n7RXqr7Xf/v37M3bsWJycrHCzpQRhv3fvXiIiIhg0aBBPPvlkwS5pEZESUMBWUhcvXiQrK4vU1FSW\nL19OixYtsFgs9O3bl1q1atm7vWI5evQoCQkJVK9enQULFlClyjUfrLG6Q4cOERkZSe/evZkwYYJC\nVkRKRAFbieTl5bF582ZSU1NZunQpdevWxWKxkJiYSP369e3dXqlcuHCBYcOG8fnnn7Ny5Ur8/f1t\nOv+xY8eIjo6mffv2TJs2zTq/pEXEIShgK7j8/Hw+//xzUlNTWbJkCTfccAMWi4WkpCSaNGli7/as\nIj8/n1deeYWJEyeydOlSOnToYNP5T58+Te/evWnQoAFz5szBxUUnjIrI9SlgK6C/zv/961QlJycn\nkpOTSUpKolWroo7Rr/jS09O58847mThxIoOscaRiCZw7d46EhAS8vb1ZtGgR7u7uNp1fRCoeBWwF\n8v33318O1bNnz5KUlITFYqFNmzYOsz64c+dOzGYz8fHxPP/881efJmWg8+fPk5KSwtmzZ1m+fLl1\nDsQQkUpLAVvO/f38319//ZXExEQsFgtBQUEOux547NgxEhMT8fDwYPHixVSt+s9Xuhvn4sWL3HXX\nXezZs4dVq1YZ82iTiFQKCthyqLDzf5OSkggLC7PpL7by7I8//uDhhx8mKyuLVatW0ahRI5vNnZeX\nx4MPPsiWLVtYt25duX3USUTsSwFbTvz9/N+vv/6a2NhYLBZL8c7/dWDTp09n7NixpKamEh4ebrN5\n8/PzGTVqFKtXryYjI4PatWvbbG4RqRgUsHZ08uRJ3n33XVJTU/n000/p2bMnFouFqKio0h1R6KAy\nMzPp378/zz33HPfcc49N5x4/fjxz5swhMzOTBg0a2HRuESnfFLA2dubMGVatWkVqaiqbNm2ia9eu\nWCwWevfujbe3t73bq7B+/PFHzGYz3bt356WXXrLpozRTp05l0qRJZGRk0KxZM5vNKyLlmwIWCl7Q\nPW8ebNsGp06Bry8EBMDgwVZ54fY/z//t2LEjFovFuPN/HdTJkyexWCzk5eWRlpaGn5+fzeaeO3cu\no0ePJj09nVtvvdVm84pI+eXYAbt1a8Eh8OnpBf/+++///e6vQ+B79Cg4BL6ELwKviOf/VgYXL17k\nX//6F2vXrmXVqlU0bdrUZnO/8847PPDAA7z33nsEBwfbbF4RKZ8cN2D/ejF4bm5BkBbFZCoI28mT\nC15/dg3/PP+3efPml8//1SYY23rzzTcZPXo0CxcuJDIy0mbzrl27lkGDBpGamkrXrl1tNq+IlD+O\nGbB/heu5c8W/xsur0JD9+/m/77zzDvXq1avw5/9WFllZWSQlJfHUU08xfPhwmx3GsWnTJhITE5k7\ndy69evWyyZwiUv44XsBu3Qrh4VeE6zRgHrAdSP7znwvl5QVZWeS3bVvpz/+tLHbv3o3ZbKZTp05M\nnTrVZo88bdmyhZiYGF599VWSkpJsMqeIlC+OF7AJCbBixRW3hZcDTsA6IJeiAzbfZGJH06bE/vEH\nTk5Ol0P1lltuMbxtKb3Tp0/Tv39/zpw5w9KlS222Br5t2zaio6N57rnnGDJkiE3mFJHyw7EC9sgR\n8Pe/cjPT3zwF7Ocav2CBP5yd2bluHa27dnWY838rg0uXLvHkk0+ybNkyVq5cScuWLW0y7w8//EBk\nZCT/+7//y8MPP2yTOUWkfHCsw2znzStzCVc3NwK+/FLhWsE4OzvzwgsvMGbMGMLDw1m7dq1N5m3a\ntCnZ2dlMmzaNf//73zjS32dFHJ1jBey2bUX+ei223FzYvt06/YjN3XHHHbz33nsMHTqUF1980SaB\n5+/vT3Z2NmlpaTzxxBMKWREH4VgBe+qUdeqcOGGdOmIXISEhfPrppyxcuJC77rqL8+fPGz5n7dq1\n2bRpE5s2beL+++8nLy/P8DlFxL4cK2CtdWqSDU8IEmPUr1+fjz76iFOnTtGtWzeOHDli+JzVqlUj\nMzOTb7/9ljvvvJOLFy8aPqeI2I9jBWxAABRyiP5F4Hfg0p9/fv/zs0J5ekLr1kZ1KDbk7e3N0qVL\n6dq1K4GBgWzbts3wOatWrUp6ejo5OTkkJiba5NeziNiHdhEDzwDP/mPo//35+VU8PGDfPqucUSzl\nR2pqKg8++CCzZs0iLi7O8PkuXLhASkoKp0+f5t1339WLHkQqIccKWCj0OdhiM5kgPh6WLbN+X2J3\nW7duJT4+nvvvv59Ro0YZvlP84sWLDB06lJ9++onVq1frxQ8ilYzjBWwhJzkV258nOdGundXbkvLh\nwIEDxMXF0bRpU9588008PT0NnS8vL4+HHnqITz75hHXr1lG9enVD5xMR23GsNVgoeCvO5MkFYVkS\nf51FrHCt1OrUqUN2djZ5eXmEh4dz6NAhQ+dzcnJi6tSpREVF0blzZw4ePGjofCJiO44XsFBwYP9f\nIXu924AmU5EH/Uvl5OnpyaJFizCbzQQFBfHFF18YOp/JZGL8+PEMGDCAsLAw9uzZY+h8ImIbzs88\n88wz9m7CLtq3h6goyMmB3bvB1RX+/tiEpye4uEBMDMyeDbGx9utVbM5kMhEWFoa/vz8Wi4WGDRvS\nqlUrQ+cMDQ3FycmJoUOH0qNHD90uFqngHG8NtjBHjxYco7h9e8EhEn5+BY/iDBqk3cLCV199RWxs\nLIMHD2bMmDE4ORl74+ett95i5MiRpKenc9tttxk6l4gYRwErUgyHDx8mPj6eOnXq8NZbb+FV0jX8\nElq6dCnDhw9nxYoVhISEGDqXiBjDMddgRUqoZs2afPDBB3h5eREaGsr+/fsNna9v377MmzeP2NhY\nNmzYYOhcImIMBaxIMXl4eDBv3jwsFgtBQUFs2bLF0Pl69OjBO++8Q3JyMqtWrTJ0LhGxPsfd5CRS\nCiaTiY4dO9KsWTMsFgu1a9cmICDAsPkaNGhA586dSUlJoW7dutxyyy2GzSUi1qU1WJFS+uabb4iJ\niSEpKYlx48YZuvlp+/btREdH8+yzzzJ06FDD5hER61HAipRBTk4Offr0wc/PjwULFuDj42PYXD/+\n+CORkZE88sgjPPLII4bNIyLWoTVYkTKoXr06GRkZ1KhRg44dOxp6SMT//M//kJ2dzfTp0xk7dqxe\n3C5SzilgRcrIzc2NN954gyFDhhASEsJHH31k2Fz169cnOzubpUuXMmLECIWsSDmmW8QiVrRu3ToG\nDhzI888/z1133WXYPMePH6dHjx60adOG1157DWdnZ8PmEpHSUcCKWNl3332H2WwmJiaGiRMnGhZ+\nv/32G2azmTp16jBv3jxcXV0NmUdESkcBK2KA48ePk5iYiJubG4sXLzbsXa+5ubn06dMHNzc30tLS\ncHd3N2QeESk5rcGKGODGG28kPT2dRo0aERISwq5duwyZx9PTkxUrVuDq6orZbObs2bOGzCMiJaeA\nFTGIq6sr06ZN48EHH6RTp05s3LjRkHn++pVcp04dunfvzsmTJw2ZR0RKRgErYrBhw4axaNEikpOT\nmTlzpiFzuLi4MHv2bNq2bUvXrl05evSoIfOISPFpDVbERnbt2oXZbKZbt25MmTIFFxcXq8+Rn5/P\nU089xbvvvktGRgZ16tSx+hwiUjz6BStiI02aNOHTTz/lp59+okePHpw4ccLqc5hMJsaNG8cdd9xB\nWFgYu3fvtvocIlI8ClgRG/L19WX16tUEBAQQFBTEd999Z8g8I0eO5LHHHiMsLIydO3caMoeIXJve\npiNiY05OTkRFReHt7U3//v0JCAigSZMmVp+nffv2VK9enYEDB9KtWzdq165t9TlEpGgKWBE7adOm\nDcHBwfTv3x9XV1eCgoIwmUxWnePWW2+lYcOGWCwWOnbsSL169axaX0SKpk1OIna2Z88ezGYzISEh\nTJs2DTc3N6vP8f777zNw4EAWL15MRESE1euLyNW0BitiZw0aNGDz5s0cPnyYyMhIcnJyrD5HdHQ0\ny5YtIyUlhZUrV1q9vohcTQErUg74+Pjw7rvv0qFDBwIDA/nmm2+sPkdYWBhr1qzhnnvuYfHixVav\nLyJX0hqsSDlhMpmIiIigWrVqpKSk0KJFC5o2bWrVOerUqUN0dDR33HEHVatWpW3btlatLyL/pYAV\nKWcCAgIIDQ1l4MCB5OXl0aFDB6tufrrpppuIjY3l7rvvJi8vj5CQEKvVFpH/0iYnkXLql19+ITY2\nloCAAF5//XWrvynnl19+ISIigpSUFMaMGWP1Hcwijk5rsCLlVL169fjwww85c+YMXbp04fDhw1av\nn52dzfLly3n88cfR37VFrEsBK1KOeXt7s2TJErp3705gYCBfffWVVevXrFmTjRs38vHHH3Pvvfdy\n6dIlq9YXcWS6RSxSQSxZsoThw4fz+uuvk5CQYNXav/32GzExMdSuXZu33noLV1dXq9YXcUQKWJEK\n5PPPPyc+Pp777ruPJ5980qrrprm5ufTr1w9nZ2fS0tLw8PCwWm0RR6SAFalgDh48SFxcHI0bN2bO\nnDl4enparfaFCxcYOHAgx44dY8WKFVSpUsVqtUUcjdZgRSqYm2++maysLJycnAgLC+PgwYNWq+3m\n5saiRYvw9/cnKiqKkydPWq22iKNRwIpUQJ6enixcuJCEhASCgoLYunWr1Wo7Ozsza9Ys2rVrR5cu\nXTh69KjVaos4EgWsSAVlMpkYNWoUU6dOpWfPnqSlpVmttpOTE1OmTKF3796EhYVx4MABq9UWcRQu\n9m5ARMomLi6Ohg0bEhsby44dO3jmmWdwcir7351NJhPPPfccPj4+hIaGkpmZSaNGjazQsYhj0CYn\nkUriyJEjJCQkULNmTebPn4+3t7fVas+YMYPx48ezbt06WrZsabW6IpWZbhGLVBI33XQTGzZsoGrV\nqnTq1Il9+/ZZrfawYcMYP3483bp148svv7RaXZHKTAErUom4u7szZ84cBgwYQHBwMJ988onVag8c\nOJDp06cTHR3Nxx9/bLW6IpWV3qYjUsmYTCY6dOhA8+bNsVgs1KpVi1tvvdUqtVu0aEFAQACJiYm0\nadOGxo0bW6WuSGWkNViRSmzHjh3ExMTQr18/xo0bh7Ozs1Xqfvjhh/Tp04dZs2YRGxtrlZoilY0C\nVqSSy8nJoW/fvlStWpW3334bHx8fq9T94osv6NWrFy+99BIpKSlWqSlSmWgNVqSSq169OuvXr6d2\n7dp06NCB3bt3W6Vu27Zt2bBhAyNGjOCNN96wSk2RykQBK+IA3NzcmDlzJvfccw8hISFkZ2dbpW6r\nVq3YtGkTEyZMYPLkyVapKVJZ6BaxiINZv349AwcOZPz48QwZMsQqNffv309ERARJSUk888wzVn3L\nj0hFpYAVcUDff/89MTEx9OzZk0mTJuHiUvZD3Y4cOUL37t3p2rUrL774okJWHJ4CVsRBnThxgqSk\nJJycnEhNTeWGG26wSs2ePXtyyy23MHPmTKvtWhapiLQGK+Kg/Pz8WLt2LU2bNiU4OJgff/zRKjUz\nMjL4+eefGTBgAH/88YcVOhWpmBSwIg7MxcWFV199lUcffZROnTqxYcOGMtesUqUKa9as4cyZM/Tp\n04fff//dCp2KVDwKWBHh3nvvJS0tjf79+zN9+vQy1/Pw8GD58uV4eXnRq1cvzpw5Y4UuRSoWrcGK\nyGU//fQTMTExdO7cmVdeeQVXV9cy1bt06RL33nsvO3bsYO3atfj5+VmpU5HyT79gReSyxo0b88kn\nn7B3716io6M5fvx4meo5Ozsza9YsgoOD6dq1K0eOHLFSpyLlnwJWRK5QtWpVVq5cSZs2bQgKCmLn\nzp1lqmcymXjppZcwm82EhYWxf/9+K3UqUr6V/eE3Eal0nJ2dmTx5Mq1ataJz587Mnz+f6OjoUtcz\nmUyMHTsWHx8fQkNDyczM1Jt4pNLT6+pEpEht2rShQ4cODBgwAGdnZ4KCgsp0gETHjh3x9PRk8ODB\nREdHU6NGDSt2K1K+aJOTiFzX3r17iYmJoX379kyfPh03N7cy1Vu4cCH/+te/WL16NW3btrVSlyLl\ni9ZgReS6/P39+fjjjzl27BgREREcPXq0TPUGDBjAjBkz6NGjBx999JGVuhQpXxSwIlIsVapUYdmy\nZYSGhhIYGMj27dvLVC8uLo63336bhIQEMjIyrNSlSPmhNVgRKTaTyUS3bt246aabSElJoVmzZjRr\n1qzU9Ro3bkxISAhJSUk0adKEFi1aWLFbEfvSLmIRKbGUlBSaNGlCQkICO3fuZMSIEaXe/NSpUyfe\nf/99evXqxdmzZxkwYICVuxWxD21yEpFS279/P3FxcbRo0YJZs2bh4eFR6lrffvst3bt356mnnuK+\n++6zYpci9qE1WBEptbp165Kdnc358+cJDw/n119/LXWtli1bkp2dzcSJE5k0aZIVuxSxDwWsiJSJ\nl5cXaWlp9OzZk8DAQP7zn/+UulajRo3Izs5m9uzZPP300+gGm1RkukUsIlazdOlShg0bxsyZM+nT\np0+p6xw5coSoqCg6d+7Myy+/XKbDLUTsRQErIlb15ZdfEhcXx9ChQ3n66adLHY4nT56kZ8+etGzZ\nktdffx1nZ2crdypiLAWsiFjdoUOHiI+Px9/fn7lz5+Ll5VWqOmfOnCE2Npbq1auzYMGCMp8gJWJL\nWoMVEaurXbs2mzZtwtXVlbCwMA4cOFCqOlWqVGHNmjXk5uaSkJBAbm6ulTsVMY4CVkQM4eHhwYIF\nC+jbty9BQUF89tlnpa6zbNkyfHx86NWrF2fOnLFypyLGUMCKiGFMJhMjR47ktddeo1evXixevLhU\ndVxdXVm4cCGNGzcmMjKSEydOWLlTEevTGqyI2MS2bduIjY2lf//+jB07Fienkv/9Pj8/n8cee4wN\nGzawfv16atasaUCnItahgBURmzl69CgJCQmXNy1VqVKlxDXy8/N59tlnSU1NJSMjg3r16hnQqUjZ\n6RaxiNhMjRo1yMzMxM/Pj44dO7J3794S1zCZTDzzzDPcfffdhIWFsWvXLgM6FSk7BayI2JS7uzuz\nZ89m0KBBhISEsHnz5lLVeeyxxxg1ahTh4eF88803Vu5SpOz0ujoRsTmTyURISAgtW7bEYrFQo0YN\nbrvtthLXadu2LbVq1aJ///6Eh4dz8803G9CtSOloDVZE7Grnzp2YzWbi4+N5/vnnS3Vi03vvvcfd\nd999+YXwIuWBAlZE7O7YsWP069cPLy8vFi1aRNWqVUtcIzMzk+TkZBYuXEhUVJQBXYqUjNZgRcTu\nqlWrxrp166hXrx4hISH8/PPPJa4RERHBe++9x8CBA1m+fLkBXYqUjAJWRMoFV1dXZsyYwfDhw+nQ\noQObNm0qcY0OHTrw/vvvM3z4cBYsWGD9JkVKQJucRKRcad++PbfddhvJycn4+vrStm3bEl1fu3Zt\nevbsyeDBg/Hw8KB9+/YGdSpybVqDFZFy6ccff8RsNtO9e3deeuklXFxcSnT9zz//TEREBPfddx8j\nRowwqEuRoilgRaTcOnnyJElJSeTn55OWloafn1+Jrj9w4AARERH06dOH5557Ti9uF5vSGqyIlFs3\n3HADa9asoWXLlgQHB/PDDz+U6Po6deqQnZ3NmjVreOSRR8jLyzOoU5GrKWBFpFxzcXFhypQpPP74\n44SGhpKRkVGi62vUqMHGjRv5/PPPGTp0KJcuXTKoU5Er6RaxiFQYWVlZJCUl8dRTTzF8+PAS3fI9\ne/YssbGx3HjjjSxcuBA3NzcDOxVRwIpIBfPzzz8TExNDp06dmDp1Kq6ursW+9vfffycpKYmLFy+y\ndOlSPD09DexUHJ1uEYtIhdKoUSM2b97MgQMH6N69O8eOHSv2tR4eHixdupQbbriBnj178ttvvxnY\nqTg6BayIVDhVq1ZlxYoVBAYGEhQUxLffflvsa11dXZk/fz5NmzYlIiKC48ePG9ipODIFrIhUSM7O\nzrzwwguMGTOG8PBw1q5dW6JrZ86cSWhoKF26dOHw4cMGdiqOSgErIhXaHXfcwYoVKxg6dCgvvvgi\nxd1WYjKZmDRpEn369CE0NJR9+/YZ3Kk4Gm1yEpFKYd++fcTExHD77bczY8YM3N3di33tyy+/zCuv\nvEJmZiZNmjQxsEtxJPoFKyKVQv369fnoo484efIk3bp148iRI8W+9tFHH2X06NF07tyZb775xsAu\nxZEoYEWk0qhSpQpLly6la9euBAYGsm3btmJfe/fddzN58mQiIiLYunWrgV2Ko9DbdESkUjGZTHTp\n0oVatWphsVho2rQpzZs3L9a1rVu3plmzZiQlJREUFIS/v7/B3UplpjVYEam0tm7dSnx8PPfffz+j\nRo0q9slPGzZswGKxsGDBAqKjow3uUiorBayIVGoHDhwgLi6Opk2b8uabbxb79KbNmzcTFxfHjBkz\n6NOnj8FdSmWkNVgRqdTq1KlDVlYWly5dIjw8nEOHDhXrug4dOrBu3ToeeOAB3nrrLYO7lMpIASsi\nlZ6XlxeLFy/GbDYTFBTEF198Uazr2rRpw8aNG3nqqaeYPn26wV1KZaNbxCLiUJYtW8Z9993H9OnT\n6devX7Gu2b17NxEREdx9992MHDnS4A6lslDAiojD+c9//kNcXByDBw9mzJgxODld/2begQMHiIyM\nJC4ujnHjxpXoVXnimBSwIuKQfv31V+Lj46lbty5vvfUWXl5e170mJyeHqKgoOnbsyJQpU4oVzOK4\n9H+HiDikWrVqsXHjRry8vAgNDWX//v3XvaZ69ep88MEHfPnllwwZMoSLFy/aoFOpqBSwIuKwPDw8\nmDdv3uWDJbZs2XLda3x9fVm3bh0HDhwgOTmZCxcu2KBTqYgUsCLi0EwmEyNGjGDmzJn07t2bhQsX\nXvcab2/KvUbkAAAQNElEQVRvVq1axcWLF4mLiyM3N9cGnUpFozVYEZE/ffPNN8TExJCUlMS4ceOu\nu8b6xx9/MHjwYPbv38/KlSupWrWqjTqVikC/YEVE/nTLLbewZcsWNm/eTEJCAr/99ts1x7u6ujJ/\n/nyaN29OREQEx48ft1GnUhEoYEVE/qZGjRpkZGRQo0YNOnbsyJ49e6453snJiRkzZtC5c2c6d+7M\nr7/+aptGpdxTwIqI/IObmxtvvPEGQ4YMISQkhI8++uia400mExMnTiQxMZGwsDD27dtno06lPNPr\n6kRECmEymQgODqZ169ZYLBaqVatGmzZtrjm+c+fOXLp0iXvuuYfevXtTrVo1G3Ys5Y02OYmIXMd3\n332H2WwmJiaGiRMn4uzsfM3xb775Jv/3f//H+++/T+vWrW3UpZQ3ClgRkWI4fvw4iYmJuLm5sXjx\nYnx9fa85Pi0tjYcffpiVK1cSGBhooy6lPNEarIhIMdx4442kp6fTsGFDQkJC2LVr1zXHJyUlMWvW\nLHr37k1WVpaNupTyRAErIlJMrq6uvPbaazzwwAN07NiRjRs3XnO82WwmNTWVfv36kZ6ebqMupbzQ\nJicRkRJq3749bdu2JTk5GR8fH9q1a1fk2IYNGxIaGorFYqFhw4a0bNnShp2KPWkNVkSklHbt2oXZ\nbCYiIoKXX34ZFxeXIsd+9dVX9OzZk/HjxzNo0CDbNSl2o4AVESmDU6dOYbFYuHjxIkuWLMHPz6/I\nsd999x3du3dnxIgRPPDAAzbsUuxBa7AiImXg6+vL6tWrad26NUFBQXz33XdFjm3evDnZ2dlMmTKF\nCRMm2LBLsQcFrIhIGTk7O/PSSy/xxBNPEBYWxrp164oc26BBA7Kzs1m4cCGjRo1CNxErL90iFhGx\nog8//JDExERGjhzJQw89hMlkKnRcTk4O0dHRBAcH8+qrr173zT1S8ShgRUSsbM+ePZjNZkJCQpg2\nbRpubm6Fjjt16hS9e/emcePGvPnmm9fcJCUVj/7KJCJiZQ0aNGDz5s38+uuvREZGkpOTU+g4X19f\n3n//fQ4dOoTFYuH8+fM27lSMpIAVETGAj48P7777Lh06dCAwMJBvvvmm0HHe3t6sXLmSvLw84uLi\nOHfunI07FaMoYEVEDOLs7MyECRN49tln6dKlC6tXry50nLu7O0uWLKFGjRr06NGD06dP27hTMYIC\nVkTEYAMHDmTVqlXce++9TJo0qdCdwy4uLsybN4+WLVvSrVs3jh07ZodOxZq0yUlExEZ++eUXYmNj\nCQgI4PXXX8fd3f2qMfn5+TzxxBOsXbuWjIwMateubYdOxRr0C1ZExEbq1avHhx9+yJkzZ+jSpQuH\nDx++aozJZOKFF14gOTmZsLAw9u7da4dOxRoUsCIiNuTt7c2SJUuIjIwkMDCQr7766qoxJpOJ0aNH\n88ADDxAWFsYPP/xgh06lrPQ2HRERGzOZTHTp0oWbb76Z5ORkmjRpQosWLa4aFxwcjK+vL3fccQeR\nkZHUrFnTDt1KaempZhERO0lKSqJx48bEx8ezc+dOnnzyyatOfrrrrrvw9vYmMjKSlStXEhQUZKdu\npaS0yUlExM4OHjxIXFwcjRs3Zs6cOXh6el41Zs2aNQwePJglS5YQHh5u+yalxLQGKyJiZzfffDNZ\nWVmYTCbCwsI4ePDgVWN69epFWloaiYmJrF271g5dSkkpYEVEygFPT0/efvtt4uPjCQwMZOvWrVeN\n6dKlCytXrmTw4MG88847duhSSkKbnEREygmTyURoaCgNGzbEYrHg7+/PLbfccsWYunXrEhUVxYAB\nA7jxxhtp06aNnbqV69EmJxGRciY+Pp5GjRoRGxvLjh07eOaZZ654nV1AQAAbN24kMjKS3377jYce\nesiO3UpRtMlJRKScOnz4MAkJCdSqVYv58+fj7e19xfd79+4lIiKCQYMGFboDWexLa7AiIuVUzZo1\n+eCDD/Dx8aFTp07s27fviu/9/f3Jzs5m8eLFjBo1qtAzjsV+FLAiIuWYu7s7c+fOpX///gQHB/PJ\nJ59c8X3t2rXJyspiw4YNDB8+nLy8PDt1Kv+kW8QiIhXEX8/CvvjiiwwcOPCK706fPk3v3r1p0KAB\nc+bMwcVFW2zsTQErIlKB7Nixg5iYGPr168e4ceNwdna+/N25c+dISEjA29ubRYsWFfq2HrEdBayI\nSAWTk5ND3759qVq1Km+//TY+Pj6Xvzt//jwpKSmcPXuW5cuX4+XlZcdOHZvWYEVEKpjq1auzfv16\natWqRYcOHdi9e/fl79zd3UlLS+Omm24iKiqKU6dO2bFTx6aAFRGpgNzc3Hj99de55557CAkJITs7\n+/J3Li4uzJs3j4CAALp168axY8fs2KnjUsCKiFRQJpOJBx98kPnz59OvXz9mz559+TsnJyemTZtG\nREQEnTt35tChQ3bs1DFpDVZEpBL4/vvvMZvN9OrVi0mTJl2xi3j8+PHMmTOHzMxMGjRoYL8mHYwC\nVkSkkjhx4gSJiYk4OzuTmprKDTfccPm7qVOnMmnSJDIyMmjWrJkdu3QcukUsIlJJ+Pn5kZ6eTtOm\nTQkODubHH3+8/N2DDz7Is88+S5cuXfj666/t2KXj0Nt0REQqEScnJ3r06IGrqysDBw7k9ttvp1Gj\nRgC0adOG+vXrk5ycTGhoKHXr1rVzt5WbAlZEpBJq164d7dq1IyUlBS8vL9q3bw9Aq1ataNWqFUlJ\nSbRt25aGDRvaudPKS2uwIiKV2E8//YTZbCY8PJxXXnkFV1dXADZt2kRiYiJz586lV69edu6yctIa\nrIhIJda4cWM++eQT9u7dS3R0NMePHwcgPDycVatWcdddd5GWlmbnLisnBayISCXn6+vLypUradOm\nDUFBQezcuROAoKAgMjIyePTRR694hlasQ2uwIiIOwMnJie7du+Pj40P//v1p3bo1TZo0oWbNmpjN\nZoYOHYqTkxPBwcH2brXS0BqsiIiD+fjjj+nbty9PPPEEDz/8MCaTib179xIREcGdd97J6NGjMZlM\n9m6zwlPAiog4oD179hATE0NgYCDTp0/Hzc2NQ4cO0b17d3r06MELL7ygkC0jrcGKiDigBg0asHnz\nZnJycoiIiODo0aPUrl2bTZs2sWnTJu6//37y8vLs3WaFpoAVEXFQVapUYfny5YSGhhIYGMj27dup\nVq0amZmZfPvtt9x5551cvHjR3m1WWLpFLCIivP322zzyyCPMnj2bmJgYzp07R58+ffD09GTx4sW4\nu7vbu8UKRwErIiIAbNmyhYSEBB566CFGjBjBH3/8QUpKCqdPn+bdd9/F29vb3i1WKApYERG5bP/+\n/cTGxtKyZUtmzZqFi4sLQ4cO5aeffmL16tX4+vrau8UKQ2uwIiJyWd26dfnwww85f/48Xbp0IScn\nhzlz5nDrrbfStWtXcnJy7N1ihaGAFRGRK3h5eZGWlkaPHj0ICgri66+/ZurUqURFRdG5c2cOHjxo\n7xYrBJfrDxEREUdjMpkYM2YMLVq0oHv37sycOZPx48fj4+NDWFgYmZmZNGjQwN5tlmsKWBERKVK/\nfv1o3LgxcXFx7Nixg6effvpyyK5fv57mzZvbu8VySwErIiLXdPvtt7Nlyxbi4+PZsWMHc+fOxcfH\nhy5dupCens5tt91m7xbLJa3BiojIdf11ypOrqythYWFERERcXpf95JNP7N1euaSAFRGRYvHw8GDB\nggX07duXoKAg6tevz7x584iNjWXDhg32bq/cUcCKiEixmUwmRo4cyWuvvUavXr04efIk77zzDsnJ\nyaxatcre7ZUrOmhCRERKZdu2bcTExDBgwADMZjOxsbFMmTIFi8Vi79bKBW1yEhGRUgkICOCzzz6j\nT58+7Nixg/fee4+EhATOnDnD0KFD7d2e3ekWsYiIlNpNN91EZmYmfn5+3HPPPbz99tv8+9//5uWX\nX7Z3a3angBURkTJxd3dn9uzZ3HnnnaSkpPDSSy8xY8YMxo4diyOvQmoNVkRErGbt2rUMGjSI0aNH\nM3v2bKKiopg4cSImk8nerdmcAlZERKzq22+/JSYmhujoaD777DNuv/12XnvtNZydne3dmk0pYEVE\nxOqOHTtGv379cHNz4+zZs5efmXV1dbV3azajNVgREbG6atWqsW7dOho2bEhOTg4HDhygX79+nD9/\n3t6t2YwCVkREDOHq6sr06dN54IEH2LlzJydPnsRsNnP27Fl7t2YTukUsIiKGy8zMJCUlhSZNmmAy\nmVizZg033HCDvdsylAJWRERs4ocffsBsNuPh4YGTkxPr16+nRo0a9m7LMApYERGxmZMnT5KYmMiu\nXbtwdXXlgw8+oE6dOlcOOnIE5s2Dbdvg1Cnw9YWAABg8GCpQICtgRUTEpi5evMhjjz3GokWL8PT0\nJCsri4YNG8LWrTBhAqSnFwz8/ff/XuTpCfn50KMHjBoF7dvbp/kSUMCKiIhdvPHGGzz22GN4eHiw\n7f77qT15MuTmFgRpUUymgrCdPBmGDbNds6WggBUREbvJyspiRVQU486fx6skF3p5lfuQ1WM6IiJi\nN529vHjRZLoqXAcAtYCqQFPgzX9eeO4cPP44fP65DbosHQWsiIjYz4QJOBVy+MRI4GfgNLASeAr4\n4p+DcnML1mzLKQWsiIjYx5EjBRuaClmpvAUu/6o1/fnnp38Oys+HtWvh6FFD2ywtBayIiNjHvHnX\n/Pp+CkK2OVAb6FnYIJPpunXsRQErIiL2sW3blY/i/MN04DfgQyABcC9sUG4ubN9uSHtlpYAVERH7\nOHXqukOcgU7AfmBGUYNOnLBeT1akgBUREfvw9S320IsUsgb7Fz8/a3RjdQpYERGxj4AA8PC46uMj\nQCpwBrgErAMWA90Kq+HpCa1bG9hk6emgCRERsY8jR8Df/6p12KNAX+BrIA/wBx4C7i6shocH7NtX\nLs8odrF3AyIi4qBuuqngbOEVK654VKcGkFWc600m6NmzXIYr6BesiIjY09atEB5ecDJTSXl5QVYW\ntGtn9basQWuwIiJiP+3bF5wp7FWik4j/exZxOQ1X0C1iERGxt78O7H/8cb1NR0RExOo+/7zgbOG1\nawuCNDf3v9/99T7Ynj0L3gdbjn+5/kUBKyIi5cvRowXHH27fXnCIhJ9fwaM4gwaV2w1NhVHAioiI\nGECbnERERAyggBURETGAAlZERMQAClgREREDKGBFREQMoIAVERExgAJWRETEAApYERERAyhgRURE\nDKCAFRERMYACVkRExAAKWBEREQMoYEVERAyggBURETGAAlZERMQAClgREREDKGBFREQMoIAVEREx\ngAJWRETEAApYERERAyhgRUREDKCAFRERMYACVkRExAAKWBEREQMoYEVERAyggBURETGAAlZERMQA\nClgREREDKGBFREQMoIAVERExgAJWRETEAApYERERAyhgRUREDKCAFRERMYACVkRExAAKWBEREQMo\nYEVERAyggBURETGAAlZERMQAClgREREDKGBFREQMoIAVERExgAJWRETEAApYERERAyhgRUREDPD/\npvxrE/NHqdYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw_random(G, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's focus on the spring layout. Let's use it on this graph." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "layout = nx.spring_layout(G, dim=2)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'1.10'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.__version__" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:124: MatplotlibDeprecationWarning: pyplot.hold is deprecated.\n", " Future behavior will be consistent with the long-time default:\n", " plot commands add elements without first clearing the\n", " Axes and/or Figure.\n", " b = plt.ishold()\n", "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:136: MatplotlibDeprecationWarning: pyplot.hold is deprecated.\n", " Future behavior will be consistent with the long-time default:\n", " plot commands add elements without first clearing the\n", " Axes and/or Figure.\n", " plt.hold(b)\n", "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.py:917: UserWarning: axes.hold is deprecated. Please remove it from your matplotlibrc and/or style files.\n", " warnings.warn(self.msg_depr_set % key)\n", "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\rcsetup.py:152: UserWarning: axes.hold is deprecated, will be removed in 3.0\n", " warnings.warn(\"axes.hold is deprecated, will be removed in 3.0\")\n" ] }, { "data": { "image/png": "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\nAAz5/5zCdES/gzuRAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw(G, layout, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's try to build some intuition on how this works. The spring layout algorithm has a lot of options we can try. For instance, we can explore what the iteration parameter does." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "initial_pos = {0: (0., 0.), 1: (1, 0), 2: (2, 1), 3: (3, 0)}" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\layout.py:330: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.\n", " if pos==None:\n" ] } ], "source": [ "layout = nx.spring_layout(G, dim=2, iterations=1, fixed=[0], pos=initial_pos)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{0: array([ 0., 0.]),\n", " 1: array([ 0.84705928, -0.25808746]),\n", " 2: array([ 1.70789324, 1.06836403]),\n", " 3: array([ 2.70031977, -0.01384775])}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "layout" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:124: MatplotlibDeprecationWarning: pyplot.hold is deprecated.\n", " Future behavior will be consistent with the long-time default:\n", " plot commands add elements without first clearing the\n", " Axes and/or Figure.\n", " b = plt.ishold()\n", "C:\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:136: MatplotlibDeprecationWarning: pyplot.hold is deprecated.\n", " Future behavior will be consistent with the long-time default:\n", " plot commands add elements without first clearing the\n", " Axes and/or Figure.\n", " plt.hold(b)\n", "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.py:917: UserWarning: axes.hold is deprecated. Please remove it from your matplotlibrc and/or style files.\n", " warnings.warn(self.msg_depr_set % key)\n", "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\rcsetup.py:152: UserWarning: axes.hold is deprecated, will be removed in 3.0\n", " warnings.warn(\"axes.hold is deprecated, will be removed in 3.0\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeEAAAFCCAYAAADGwmVOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlYlWXCx/HvcUdMoyx1qKysxkwhTQdcmFxaXEZ9McNd\nwCUFK010JpzezGmx5gUbTQ8WaqikEikgqJiGS2g4OlnoZFY6o2kGWSSJiCzn/eOMjRnuB+6z/D7X\nxXXJOc95zg/x8nfu+7mf57HYbDYbIiIiUu1qmA4gIiLiqVTCIiIihqiERUREDFEJi4iIGKISFhER\nMUQlLCIiYohKWERExBCVsIiIiCEqYREREUNUwiIiIoaohEVERAxRCYuIiBiiEhYRETFEJSwiImKI\nSlhERMQQlbCIiIghKmERERFDVMIiIiKGqIRFREQMUQmLiIgYohIWERExRCUsIiJiiEpYRETEEJWw\niIiIISphERERQ2qZDiAiclny8yEhAXJz4cQJaNQI/PwgPBxuusl0OpGrYrHZbDbTIURELmjnTpg5\nE9ats39/+vR/n/PyApsNevWC6Gjo0MFMRpGrpBIWEecVFwdTpkBxsb1sL8RisRdyTAxERFRfPpFr\npOloEXFOZwv41KlLb2uz2bebMsX+vYpYXIRGwiLifHbuhK5df1HAJUAksBH4AWgBzAR6nf/a+vVh\nyxZo3756sopcA62OFhHnM3OmfQr6HGXArcAW4ATwEhAC/Pv81xYX218v4gI0EhYR55KfD82b/3IB\n1gX4AdOBx85/ol49OHxYq6bF6WkkLCLOJSHhsjbLA74A7qvsSYvlsvcjYpJKWEScS27uJUfBpcAw\nIBRoWdkGxcWwZ4/js4k4mEpYRJzLiRMXfboCGAHUAeZebMOCAsdlEqkiOkVJRJxLo0YXfMoGjMY+\nFb0WqH2x/fj4ODSWSFXQSFhEnIufn31hVSUigH1AOuB1sX14eUGbNo7PJuJgWh0tIs7lAqujDwG3\nA3X55RTem9iPD/+CVkeLi9BIWEScy803Y+vZkwqL5RcPN8c+HX0aOHnO168K2GKB3r1VwOISVMIi\n4lTOnDnDyxUVlFztDry87DdzEHEBKmERcRoFBQX07NmTv9tsWGbNsl+C8krUr2+/iYMuWSkuQiUs\nIk7hq6++omPHjtx///2kpKRQb9Ike6HWr2+fYr6ICuB0zZrYdBclcTEqYREx7sMPP6RLly4888wz\nzJo1i5o1a9qfiIiw34whONi+2MrrvDXRXl5Qrx62/v0Jvf12Ehs0qP7wItdAq6NFxKglS5YwdepU\nEhMTefjhhy+84Xff2S9FuWeP/UIcPj7205DCwuCmm/j444/p2bMnu3fvxtfXt7rii1wTlbCIGFFR\nUcHzzz/P8uXLSU9Pp1WrVte8zxdeeIEdO3awdu1aLJeYwhZxBiphEal2xcXFhIWFceTIEVJTU7nJ\nQacTlZaWEhAQQGRkJGPGjHHIPkWqko4Ji0i1ysvLo1u3btSqVYsPPvjAYQUMULt2bRYvXkx0dDSH\nDh1y2H5FqopKWESqzZ49ewgICKB3794kJiZS7wKXp7wWbdq0YfLkyYwaNYqKigqH71/EkVTCIlIt\n1q1bR48ePZg5cybPP/98lR6znTp1KidPniQuLq7K3kPEEXRMWESq3Ny5c3n55ZdZuXIlnTp1qpb3\n/Pzzz+nSpQs5OTncdddd1fKeIldKJSwiVaasrIxnnnmGrKwsMjIyuOOOO6r1/WfNmkVKSgqbN2/+\n77nHIk5E09EiUiUKCwvp168f+/fvZ/v27dVewAATJ04EYM6cOdX+3iKXQyNhEXG4Q4cO8Yc//IEu\nXbowZ84cateubSzLgQMHCAgIYNu2bfz2t781lkOkMhoJi4hD7dixg44dOzJ69GisVqvRAgZo0aIF\nM2bMIDQ0lLKyMqNZRM6nEhYRh0lOTqZv3768+eabTJo0yWmuWhUREYG3tzcxMTGmo4j8gqajReSa\n2Ww2Zs6cyfz581m9ejX333+/6Ui/cujQIdq3b8+mTZto3bq16TgigEpYRK5RSUkJ48aNY+/evaSn\np9OsWTPTkS5owYIFWK1WduzYYXyaXAQ0HS0i1+D777/n4Ycf5qeffmLLli1OXcAAo0ePpmnTprzy\nyiumo4gAKmERuUr79+8nMDCQTp06kZycjLe3t+lIl2SxWIiPj2fevHl8/PHHpuOIqIRF5Mpt2rSJ\n3//+90RHR/Pqq69So4br/Ffi6+tLbGwsoaGhlJSUmI4jHk7HhEXkiixatIjo6GhWrFhBt27dTMe5\nKjabjeDgYFq1aqWpaTFKJSwil6WiooLo6GhWrVrFmjVruOeee0xHuiZ5eXn4+/uTlpZGQECA6Tji\noVxnDklEjCkqKmLgwIHk5OSQk5Pj8gUM0KRJE+bMmUNoaCjFxcWm44iHUgmLyEV98803PPjggzRs\n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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw(G, layout, with_labels=True)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 98%|█████████████████████████████████████████▎| 60/61 [00:03<00:00, 18.97it/s]\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from moviepy.editor import VideoClip\n", "from moviepy.video.io.bindings import mplfig_to_npimage\n", "\n", "duration = 3\n", "max_iterations = 100\n", "fig, ax = plt.subplots()\n", "def make_frame(t):\n", " current_iter = int(max_iterations / duration * t)\n", " ax.clear()\n", " layout = nx.spring_layout(G, dim=2, iterations=current_iter, fixed=[0], pos=initial_pos)\n", " nx.draw(G, layout, with_labels=True, ax=ax, )\n", " ax.set_title('iteration #{}/{}'.format(current_iter, max_iterations))\n", " return mplfig_to_npimage(fig)\n", "\n", "animation = VideoClip(make_frame, duration=duration)\n", "plt.close(fig)\n", "animation.ipython_display(fps=20, loop=True, autoplay=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we have seen above, the layout that is obtained is quite nice. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's try with a more complicated graph." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "G_dense = nx.wheel_graph(30)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "initial_pos_dense = nx.random_layout(G_dense)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nDAaDwTAA/wcZg8Pzq0tTUAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw(G_dense, initial_pos_dense)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from IPython.display import display" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 98%|█████████████████████████████████████████▎| 60/61 [00:05<00:00, 12.01it/s]\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "duration = 3\n", "max_iterations = 100\n", "fig, ax = plt.subplots()\n", "def make_frame(t):\n", " current_iter = int(max_iterations / duration * t)\n", " ax.clear()\n", " layout_dense = nx.spring_layout(G_dense, iterations=current_iter, pos=initial_pos_dense, fixed=[0])\n", " nx.draw(G_dense, layout_dense, with_labels=True, ax=ax)\n", " ax.set_title('iteration #{}/{}'.format(current_iter, max_iterations))\n", " return mplfig_to_npimage(fig)\n", "\n", "animation = VideoClip(make_frame, duration=duration)\n", "plt.close(fig)\n", "animation.ipython_display(fps=20, loop=True, autoplay=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How does this work? Let's go more in depth." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Force directed algorithms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It turns out that `networkx` uses an algorithm called the Fruchterman Reingold algorithm, which is a [force directed graph layout algorithm](https://en.wikipedia.org/wiki/Force-directed_graph_drawing).\n", "\n", "As can be read in the quoted Wikipedia page, the history of force directed graphs can be described as follows:\n", "\n", "\n", "> The combination of attractive forces on adjacent vertices, and repulsive forces on all vertices, was first used by Eades (1984);[15] additional pioneering work on this type of force-directed layout was done by Fruchterman & Reingold (1991).[12] The idea of using only spring forces between all pairs of vertices, with ideal spring lengths equal to the vertices' graph-theoretic distance, is from Kamada & Kawai (1989).[11]\n", "\n", "So the three basic models for force directed placement would be:\n", "\n", "- Eades: attractive forces on adjacent vertices, repulsive forces everywhere else\n", "- Kamada & Kawai: spring forces with ideal lengths between all pairs of vertices\n", "- Fruchterman & Reingold: something else\n", "\n", "Since we are interested in the all of these methods, let's look at each of them in turn. What is interesting between all of them is that we can define forces of different types and move the nodes as a function of these forces." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fruchterman Reingold " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As of the current implementation of `networkx`, the main loop of this function is as follows:\n", "\n", "```python\n", " # optimal distance between nodes\n", " if k is None:\n", " k = np.sqrt(1.0/nnodes)\n", " # the initial \"temperature\" is about .1 of domain area (=1x1)\n", " # this is the largest step allowed in the dynamics.\n", " # We need to calculate this in case our fixed positions force our domain\n", " # to be much bigger than 1x1\n", " t = max(max(pos.T[0]) - min(pos.T[0]), max(pos.T[1]) - min(pos.T[1]))*0.1\n", " # simple cooling scheme.\n", " # linearly step down by dt on each iteration so last iteration is size dt.\n", " dt = t/float(iterations+1)\n", " delta = np.zeros((pos.shape[0], pos.shape[0], pos.shape[1]), dtype=A.dtype)\n", " # the inscrutable (but fast) version\n", " # this is still O(V^2)\n", " # could use multilevel methods to speed this up significantly\n", " for iteration in range(iterations):\n", " # matrix of difference between points\n", " for i in range(pos.shape[1]):\n", " delta[:, :, i] = pos[:, i, None] - pos[:, i]\n", " # distance between points\n", " distance = np.sqrt((delta**2).sum(axis=-1))\n", " # enforce minimum distance of 0.01\n", " distance = np.where(distance < 0.01, 0.01, distance)\n", " # displacement \"force\"\n", " displacement = np.transpose(np.transpose(delta) *\n", " (k * k / distance**2 - A * distance / k)\n", " ).sum(axis=1)\n", " # update positions\n", " length = np.sqrt((displacement**2).sum(axis=1))\n", " length = np.where(length < 0.01, 0.1, length)\n", " delta_pos = np.transpose(np.transpose(displacement) * t / length)\n", " if fixed is not None:\n", " # don't change positions of fixed nodes\n", " delta_pos[fixed] = 0.0\n", " pos += delta_pos\n", " # cool temperature\n", " t -= dt\n", "```\n", "\n", "So, this implementation involves:\n", "\n", "- computing distances between the nodes\n", "- computing a force vector from it (named `displacement` in the above code)\n", "- adding the effect of the force times the time increment to the position\n", "\n", "\n", "Ways of solving the problem:\n", "\n", "- C. Rossant's minimization problem http://ipython-books.github.io/featured-02/\n", "- the original article: http://onlinelibrary.wiley.com/doi/10.1002/spe.4380211102/epdf" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }