Created
April 14, 2020 17:40
-
-
Save duhaime/d684d0bf68041463707bf0b17a1b782b to your computer and use it in GitHub Desktop.
Rectangle Packing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 371, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[93, 87, 58, 58, 51, 49, 47, 45, 44, 41, 37, 36, 36, 36, 33, 33, 32, 32, 32, 32, 31, 31, 31, 30, 30, 30, 30, 29, 29, 29, 28, 28, 27, 25, 24, 24, 24, 23, 22, 21, 21, 20, 20, 20, 20, 18, 18, 18, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 10, 10]\n" | |
] | |
} | |
], | |
"source": [ | |
"%matplotlib inline\n", | |
"\n", | |
"from matplotlib.patches import Rectangle\n", | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"import random\n", | |
"\n", | |
"def get_color():\n", | |
" return '#' + ''.join(random.choice('0123456789abcdef') for n in range(6))\n", | |
"\n", | |
"def plot(arr, boxes=True, points=True, s=0.01, unit_size=None):\n", | |
" fig, ax = plt.subplots(1, figsize=(20,20))\n", | |
" if boxes:\n", | |
" for i in arr:\n", | |
" color = get_color()\n", | |
" rect = Rectangle((i.x, i.y), i.w, i.h, linewidth=1, facecolor=color)\n", | |
" ax.add_patch(rect)\n", | |
" if points:\n", | |
" points_arr = [] \n", | |
" for i in arr:\n", | |
" area = i.w*i.h\n", | |
" per_unit = (area / i.cells)**(1/2)\n", | |
" x_units = math.ceil(i.w / per_unit)\n", | |
" y_units = math.ceil(i.h / per_unit)\n", | |
" if not unit_size: unit_size = min(i.w/x_units, i.h/y_units)\n", | |
" for j in range(i.cells):\n", | |
" x = j%x_units\n", | |
" y = j//x_units\n", | |
" #print(x, y, x_units, y_units)\n", | |
" points_arr.append([\n", | |
" i.x+x*unit_size, \n", | |
" i.y+y*unit_size,\n", | |
" ])\n", | |
" points_arr = np.array(points_arr)\n", | |
" x, y = points_arr.T\n", | |
" ax.scatter(x, y, s=s, c='black', zorder=2)\n", | |
" plt.autoscale(enable=True, tight=False)\n", | |
" ax.set_aspect('equal', 'box')\n", | |
" ax.axis('off')\n", | |
" plt.show()\n", | |
"\n", | |
"class Box:\n", | |
" def __init__(self, *args):\n", | |
" self.cells = args[0]\n", | |
" self.w = args[1]\n", | |
" self.h = args[2]\n", | |
" self.x = None if len(args) < 4 else args[3]\n", | |
" self.y = None if len(args) < 5 else args[4]\n", | |
" \n", | |
"# create synthetic data\n", | |
"a = np.random.lognormal(size=(100,))\n", | |
"#a = np.random.random(size=(100,))\n", | |
"a = a + 1\n", | |
"a *= 10\n", | |
"s = sorted(a.astype(int), reverse=True)\n", | |
"print(s)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# X-Wrap Layout" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 376, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 1440x1440 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import math\n", | |
"\n", | |
"# add box sizes\n", | |
"boxes = []\n", | |
"for i in s:\n", | |
" x = math.ceil(i**(1/2))\n", | |
" y = x\n", | |
" boxes.append(Box(i, x, y, 0, 0))\n", | |
"\n", | |
"# find the position along x axis where we want to create a break\n", | |
"full = sum([i.w for i in boxes])\n", | |
"wrap = 75\n", | |
"y = 0\n", | |
"x = 0\n", | |
"for idx, i in enumerate(boxes):\n", | |
" i.y = y\n", | |
" i.x = x\n", | |
" x += i.w + 1\n", | |
" if x > wrap:\n", | |
" y = max([j.h + j.y for j in boxes if j.y == y]) + 1\n", | |
" x = 0\n", | |
" \n", | |
"plot(boxes, boxes=False, s=20)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Y-Wrap Layout" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 340, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 1440x1440 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# add box sizes\n", | |
"boxes = []\n", | |
"for i in s:\n", | |
" x = math.ceil(i**(1/2))\n", | |
" y = x\n", | |
" boxes.append(Box(i, x, y, None, None))\n", | |
"\n", | |
"# find the position along x axis where we want to create a break\n", | |
"wrap = 70\n", | |
"\n", | |
"# find the valid positions on the y axis\n", | |
"y = 0\n", | |
"y_spots = []\n", | |
"for idx, i in enumerate(boxes):\n", | |
" if (y + i.h) < wrap:\n", | |
" y_spots.append(y)\n", | |
" y += i.h+1\n", | |
"\n", | |
"y_spot_index = 0\n", | |
"\n", | |
"for idx, i in enumerate(boxes):\n", | |
" # find the y position\n", | |
" y = y_spots[y_spot_index]\n", | |
" # find members with this y position\n", | |
" row_members = [j.x + j.w for j in boxes if j.y == y]\n", | |
" # assign the y position\n", | |
" i.y = y\n", | |
" y_spot_index = (y_spot_index + 1) % len(y_spots)\n", | |
" # assign the x position\n", | |
" if row_members:\n", | |
" i.x = max(row_members) + 1\n", | |
" else:\n", | |
" i.x = 0 \n", | |
"plot(boxes, s=20, boxes=False)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Treemap Layout" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 372, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 1440x1440 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import squarify\n", | |
"\n", | |
"# these values define the coordinate system for the returned rectangles\n", | |
"# the values will range from x to x + width and y to y + height\n", | |
"x = 0\n", | |
"y = 0\n", | |
"width = 700\n", | |
"height = 433\n", | |
"\n", | |
"values = s\n", | |
"\n", | |
"# values must be sorted descending (and positive, obviously)\n", | |
"values.sort(reverse=True)\n", | |
"\n", | |
"# the sum of the values must equal the total area to be laid out\n", | |
"# i.e., sum(values) == width * height\n", | |
"values = squarify.normalize_sizes(values, width, height)\n", | |
"\n", | |
"# returns a list of rectangles\n", | |
"rects = squarify.squarify(values, x, y, width, height)\n", | |
"\n", | |
"# padded rectangles will probably visualize better for certain cases\n", | |
"padded_rects = squarify.padded_squarify(values, x, y, width, height)\n", | |
"\n", | |
"boxes = [Box(s[idx], i['dx'], i['dy'], i['x'], i['y']) for idx, i in enumerate(rects)]\n", | |
"\n", | |
"plot(boxes, boxes=False, s=20, unit_size=8)" | |
] | |
} | |
], | |
"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.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment