Skip to content

Instantly share code, notes, and snippets.

@ahartikainen
Created April 29, 2019 18:37
Show Gist options
  • Save ahartikainen/f8c20c716216c5f43659341efcb01074 to your computer and use it in GitHub Desktop.
Save ahartikainen/f8c20c716216c5f43659341efcb01074 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy import signal"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"nx, ny = 100, 100\n",
"rng = np.random.RandomState(seed=24)\n",
"z = rng.rand(nx, ny)\n",
"\n",
"sizex, sizey = 30, 30\n",
"x, y = np.mgrid[-sizex:sizex+1, -sizey:sizey+1]\n",
"g = np.exp(-0.333*(x**2/float(sizex)+y**2/float(sizey)))\n",
"f = g/g.sum()\n",
"\n",
"z = signal.convolve(z, f, mode='valid')\n",
"z = (z - z.min())/(z.max() - z.min())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"cmap = 'viridis' # Perceptual\n",
"cmap = 'spectral' # Classic rainbow\n",
"cmap = 'seismic' # Classic diverging\n",
"cmap = 'Accent' # Needs coolinearity constraint\n",
"cmap = 'Dark2' # Needs coolinearity constraint\n",
"cmap = 'Paired' # Needs coolinearity constraint, ultimate test!\n",
"cmap = 'gist_ncar' # Works with new cool-point start location\n",
"cmap = 'Pastel1' # Amazing that it works for start point\n",
"cmap = 'Set2' # Difficult\n",
"\n",
"#cmap = 'Dark2'"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0x199e52e3be0>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(frameon=False)\n",
"fig.set_size_inches(5,5)\n",
"\n",
"ax = plt.Axes(fig, [0., 0., 1., 1.])\n",
"ax.set_axis_off()\n",
"fig.add_axes(ax)\n",
"\n",
"# Note: interpolation introduces new colours.\n",
"plt.imshow(z, cmap=cmap, aspect='auto')\n",
"#plt.imshow(z, cmap=cmap, interpolation='none')\n",
"fig.savefig('test.png')\n",
"plt.colorbar()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(40, 40)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.shape"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"cmaps = [('Perceptually Uniform Sequential',\n",
" ['viridis', 'inferno', 'plasma', 'magma']),\n",
" ('Sequential', ['Blues', 'BuGn', 'BuPu',\n",
" 'GnBu', 'Greens', 'Greys', 'Oranges', 'OrRd',\n",
" 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu',\n",
" 'Reds', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd']),\n",
" ('Sequential (2)', ['afmhot', 'autumn', 'bone', 'cool',\n",
" 'copper', 'gist_heat', 'gray', 'hot',\n",
" 'pink', 'spring', 'summer', 'winter']),\n",
" ('Diverging', ['BrBG', 'bwr', 'coolwarm', 'PiYG', 'PRGn', 'PuOr',\n",
" 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Spectral',\n",
" 'seismic']),\n",
" ('Qualitative', ['Accent', 'Dark2', 'Paired', 'Pastel1',\n",
" 'Pastel2', 'Set1', 'Set2', 'Set3']),\n",
" ('Miscellaneous', ['gist_earth', 'terrain', 'ocean', 'gist_stern',\n",
" 'brg', 'CMRmap', 'cubehelix',\n",
" 'gnuplot', 'gnuplot2', 'gist_ncar',\n",
" 'nipy_spectral', 'jet', 'rainbow',\n",
" 'gist_rainbow', 'hsv', 'flag', 'prism'])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Read an image"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x199e63a2a90>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img = plt.imread('test.png')\n",
"plt.imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"img_ = img[..., :-1]"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"unique_colors = set()\n",
"for c in img_.reshape(-1, 3):\n",
" unique_colors.add(tuple(c))\n",
"unique_colors = {c : i for i, c in enumerate(unique_colors)}\n",
"unique_colors_reverse = {val : key for key, val in unique_colors.items()}\n",
"len(unique_colors)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from collections import defaultdict"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"differences = {\"top\" : defaultdict(lambda: defaultdict(int)),\n",
" \"bottom\" : defaultdict(lambda: defaultdict(int)),\n",
" \"left\" : defaultdict(lambda: defaultdict(int)),\n",
" \"right\" : defaultdict(lambda: defaultdict(int)),\n",
" }\n",
"rows, cols = img_.shape[:2]\n",
"for row in range(rows):\n",
" for col in range(cols):\n",
" cval = unique_colors[tuple(img_[row, col])]\n",
" if (row != 0):\n",
" val = unique_colors[tuple(img_[row-1, col])]\n",
" differences[\"top\"][f\"from_{cval}\"][f\"to_{val}\"] += 1\n",
" if (row != rows-1):\n",
" val = unique_colors[tuple(img_[row+1, col])]\n",
" differences[\"bottom\"][f\"from_{cval}\"][f\"to_{val}\"] += 1\n",
" if (col != 0):\n",
" val = unique_colors[tuple(img_[row, col-1])]\n",
" differences[\"left\"][f\"from_{cval}\"][f\"to_{val}\"] += 1\n",
" if (col != cols-1):\n",
" val = unique_colors[tuple(img_[row, col+1])]\n",
" differences[\"right\"][f\"from_{cval}\"][f\"to_{val}\"] += 1"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"MM = sum([pd.DataFrame(differences[key]).fillna(0).astype(int) for key in differences]).sort_index().sort_index(axis=1).T\n",
"for i in range(len(MM)):\n",
" MM.iloc[i, i] = 0"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
" #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col0 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col2 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col3 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col4 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col5 {\n",
" background-color: #7db8da;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col6 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col7 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col0 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col2 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col3 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col4 {\n",
" background-color: #caddf0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col5 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col6 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col7 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col0 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col2 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col3 {\n",
" background-color: #6dafd7;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col4 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col5 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col6 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col7 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col0 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col2 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col3 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col4 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col5 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col6 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col7 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col0 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col1 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col2 {\n",
" background-color: #ccdff1;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col3 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col4 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col5 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col6 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col7 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col0 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col2 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col3 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col4 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col5 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col6 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col7 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col0 {\n",
" background-color: #b3d3e8;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col2 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col3 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col4 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col5 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col6 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col7 {\n",
" background-color: #5ba3d0;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col0 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col1 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col2 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col3 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col4 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col5 {\n",
" background-color: #eef5fc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col6 {\n",
" background-color: #89bedc;\n",
" } #T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col7 {\n",
" background-color: #eef5fc;\n",
" }</style> \n",
"<table id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93\" > \n",
"<thead> <tr> \n",
" <th class=\"blank level0\" ></th> \n",
" <th class=\"col_heading level0 col0\" >to_0</th> \n",
" <th class=\"col_heading level0 col1\" >to_1</th> \n",
" <th class=\"col_heading level0 col2\" >to_2</th> \n",
" <th class=\"col_heading level0 col3\" >to_3</th> \n",
" <th class=\"col_heading level0 col4\" >to_4</th> \n",
" <th class=\"col_heading level0 col5\" >to_5</th> \n",
" <th class=\"col_heading level0 col6\" >to_6</th> \n",
" <th class=\"col_heading level0 col7\" >to_7</th> \n",
" </tr></thead> \n",
"<tbody> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row0\" class=\"row_heading level0 row0\" >from_0</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col0\" class=\"data row0 col0\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col1\" class=\"data row0 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col2\" class=\"data row0 col2\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col3\" class=\"data row0 col3\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col4\" class=\"data row0 col4\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col5\" class=\"data row0 col5\" >981</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col6\" class=\"data row0 col6\" >513</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row0_col7\" class=\"data row0 col7\" >0</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row1\" class=\"row_heading level0 row1\" >from_1</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col0\" class=\"data row1 col0\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col1\" class=\"data row1 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col2\" class=\"data row1 col2\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col3\" class=\"data row1 col3\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col4\" class=\"data row1 col4\" >135</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col5\" class=\"data row1 col5\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col6\" class=\"data row1 col6\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row1_col7\" class=\"data row1 col7\" >0</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row2\" class=\"row_heading level0 row2\" >from_2</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col0\" class=\"data row2 col0\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col1\" class=\"data row2 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col2\" class=\"data row2 col2\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col3\" class=\"data row2 col3\" >1071</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col4\" class=\"data row2 col4\" >369</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col5\" class=\"data row2 col5\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col6\" class=\"data row2 col6\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row2_col7\" class=\"data row2 col7\" >0</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row3\" class=\"row_heading level0 row3\" >from_3</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col0\" class=\"data row3 col0\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col1\" class=\"data row3 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col2\" class=\"data row3 col2\" >1071</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col3\" class=\"data row3 col3\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col4\" class=\"data row3 col4\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col5\" class=\"data row3 col5\" >1206</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col6\" class=\"data row3 col6\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row3_col7\" class=\"data row3 col7\" >0</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row4\" class=\"row_heading level0 row4\" >from_4</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col0\" class=\"data row4 col0\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col1\" class=\"data row4 col1\" >135</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col2\" class=\"data row4 col2\" >369</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col3\" class=\"data row4 col3\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col4\" class=\"data row4 col4\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col5\" class=\"data row4 col5\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col6\" class=\"data row4 col6\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row4_col7\" class=\"data row4 col7\" >0</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row5\" class=\"row_heading level0 row5\" >from_5</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col0\" class=\"data row5 col0\" >981</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col1\" class=\"data row5 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col2\" class=\"data row5 col2\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col3\" class=\"data row5 col3\" >1206</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col4\" class=\"data row5 col4\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col5\" class=\"data row5 col5\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col6\" class=\"data row5 col6\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row5_col7\" class=\"data row5 col7\" >0</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row6\" class=\"row_heading level0 row6\" >from_6</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col0\" class=\"data row6 col0\" >513</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col1\" class=\"data row6 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col2\" class=\"data row6 col2\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col3\" class=\"data row6 col3\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col4\" class=\"data row6 col4\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col5\" class=\"data row6 col5\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col6\" class=\"data row6 col6\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row6_col7\" class=\"data row6 col7\" >387</td> \n",
" </tr> <tr> \n",
" <th id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93level0_row7\" class=\"row_heading level0 row7\" >from_7</th> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col0\" class=\"data row7 col0\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col1\" class=\"data row7 col1\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col2\" class=\"data row7 col2\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col3\" class=\"data row7 col3\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col4\" class=\"data row7 col4\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col5\" class=\"data row7 col5\" >0</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col6\" class=\"data row7 col6\" >387</td> \n",
" <td id=\"T_0f68025c_6aaa_11e9_ac35_48ba4e91ae93row7_col7\" class=\"data row7 col7\" >0</td> \n",
" </tr></tbody> \n",
"</table> "
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x199e7929a20>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"MM.style.background_gradient(cmap=\"Blues\", low=0.1, high=0.9)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"1, 4, 2, 3, 5, 0, 6, 7"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"MM_ = MM.copy()\n",
"cfrom = MM_.astype(bool).sum(1).idxmin()\n",
"order = [cfrom]\n",
"last_sum = 0\n",
"while MM_.sum().sum() and (last_sum != MM_.sum().sum()):\n",
" last_sum = MM_.sum().sum()\n",
" \n",
" cto = MM_.loc[cfrom, :].idxmax()\n",
" MM_.loc[cfrom, cto] = 0\n",
" cfrom, cto = f'from_{cto.split(\"_\")[-1]}', f'to_{cfrom.split(\"_\")[-1]}'\n",
" order.append(cfrom)\n",
" MM_.loc[cfrom, cto] = 0"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"my_custom_cmap = [unique_colors_reverse[int(key.split(\"_\")[-1])] for key in order]"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [],
"source": [
"my_cmap = plt.matplotlib.colors.LinearSegmentedColormap.from_list(\"my_cmap\", my_custom_cmap, N=len(my_custom_cmap))"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0x199e8194438>"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAABjCAYAAACrMRuNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAABplJREFUeJzt3V2oZWUZB/D/Y5NKZJkOQqSNBQqJEImU3fSBESLMDISEhpQhXhh1UREEXRTVVRFhUJiS9AGV1UUNUXhhhhGNKImignQyMTEaK5uGhqlR3y72JqZpPGfN+djPkf37wYK1Z6/1zjPzsPb+n/W+e58aYwQAoNMp3QUAAAgkAEA7gQQAaCeQAADtBBIAoJ1AAgC0E0gAgHYCCQDQTiABANrt2MjJ573ljePIwUObVcuLzq5//qO7hHZ/3nFOdwntzjr6fHcJ7Q6deaC7hHZn5Uh3Ca2OPruzu4R2h587rbuEdisrK3eMMa5Yz7kbCiRHDh7Ke279/EaGeFH72r13dpfQ7qazb+wuod37Diz3G1GS3LXnpu4S2l1Tv+suodVTT9/QXUK73z6zq7uEdrt37153MjVlAwC0E0gAgHYCCQDQTiABANoJJABAO4EEAGgnkAAA7QQSAKCdQAIAtBNIAIB2AgkA0E4gAQDaCSQAQDuBBABoJ5AAAO0EEgCgnUACALQTSACAdgIJANBOIAEA2gkkAEA7gQQAaCeQAADtBBIAoJ1AAgC0E0gAgHYCCQDQTiABANoJJABAO4EEAGgnkAAA7QQSAKCdQAIAtBNIAIB2AgkA0E4gAQDaCSQAQDuBBABoJ5AAAO0EEgCgnUACALQTSACAdgIJANBOIAEA2gkkAEA7gQQAaCeQAADtBBIAoJ1AAgC0E0gAgHYCCQDQTiABANoJJABAO4EEAGgnkAAA7QQSAKCdQAIAtBNIAIB2AgkA0E4gAQDaCSQAQDuBBABoJ5AAAO1qjLH+k6seSnJk88phk+1M8pfuIjghvdne9Gd705/t6/QxxsXrOXHHBv/iI2OMSzc4Blukqu7Tn+1Jb7Y3/dne9Gf7qqr71nuuKRsAoJ1AAgC022gguWVTqmCr6M/2pTfbm/5sb/qzfa27Nxta1AoAsBlM2QAA7QQSAKDdpEBSVVdU1aNVtVJVnzzB86dV1e3z5++pqvM3u1BObEJvPlZVj1TVg1V1Z1Xt6qhzWa3Vn2OOu6qqRlX5KOMCTelPVb13fg09XFXfXXSNy2zC69trq+quqrp//hp3ZUedy6iqbquqA/PvIzvR81VVX5n37sGqumTNQccYq25JXpLk90len+TUJA8kuei4Yz6U5Ob5/tVJbl9rXNvGt4m9eWeSl833b9Sb7dWf+XFnJLk7yf4kl3bXvSzbxOvngiT3J3nV/PE53XUvyzaxP7ckuXG+f1GSx7vrXpYtyduSXJLkoRd4/sokP09SSS5Lcs9aY065Q/LmJCtjjMfGGP9O8v0ke487Zm+Sb833f5Tk8qqqCWOzMWv2Zoxx1xjj8Pzh/iTnLrjGZTbl2kmSzyX5Qnzr8aJN6c8NSb46xngmScYYBxZc4zKb0p+R5BXz/VcmeWqB9S21McbdSf62yiF7k3x7zOxPcmZVvXq1MacEktck+eMxj5+c/9kJjxljPJvkYJKzJ4zNxkzpzbGuzyyxshhr9qeq3pTkvDHGTxdZGEmmXT8XJrmwqn5dVfur6oqFVceU/nwmybVV9WSSnyX5yGJKY4KTfX+a9NXxJ7rTcfxnhaccw+ab/P9eVdcmuTTJ27e0Io61an+q6pQkX05y3aIK4n9MuX52ZDZt847M7i7+qqouHmP8fYtrY1p/rknyzTHGl6rqrUm+M+/P81tfHms46Vww5Q7Jk0nOO+bxufn/22L/PaaqdmR262y1Wzlsjim9SVW9K8mnkuwZY/xrQbWxdn/OSHJxkl9W1eOZzbPus7B1Yaa+tv1kjHF0jPGHJI9mFlDYelP6c32SHyTJGOM3SU7P7Bfv0W/S+9OxpgSSe5NcUFWvq6pTM1u0uu+4Y/Yl+cB8/6okvxjzVS1sqTV7M58S+HpmYcT892Kt2p8xxsExxs4xxvljjPMzW+OzZ4yx7l9OxUmZ8tr248wWhqeqdmY2hfPYQqtcXlP680SSy5Okqt6QWSB5eqFV8kL2JXn//NM2lyU5OMb402onrDllM8Z4tqo+nOSOzFY93zbGeLiqPpvkvjHGviTfyOxW2Upmd0au3ui/hLVN7M0Xk7w8yQ/n64yfGGPsaSt6iUzsD00m9ueOJO+uqkeSPJfkE2OMv/ZVvTwm9ufjSW6tqo9mNh1wnR+GF6OqvpfZVObO+RqeTyd5aZKMMW7ObE3PlUlWkhxO8sE1x9Q7AKCbb2oFANoJJABAO4EEAGgnkAAA7QQSAKCdQAIAtBNIAIB2/wElTI4MjP0SzAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 648x108 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"a = np.array([[0,1]])\n",
"plt.figure(figsize=(9, 1.5))\n",
"img = plt.imshow(a, cmap=my_cmap)\n",
"plt.gca().set_visible(False)\n",
"cax = plt.axes([0.1, 0.2, 0.8, 0.6])\n",
"plt.colorbar(orientation=\"horizontal\", cax=cax)"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0x199e820b898>"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 648x108 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"a = np.array([[0,1]])\n",
"plt.figure(figsize=(9, 1.5))\n",
"img = plt.imshow(a, cmap=cmap)\n",
"plt.gca().set_visible(False)\n",
"cax = plt.axes([0.1, 0.2, 0.8, 0.6])\n",
"plt.colorbar(orientation=\"horizontal\", cax=cax)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"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.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment