{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:32:52.815000Z", "start_time": "2019-04-13T20:32:52.466000Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "import numpy as np\n", "from matplotlib.patches import Circle\n", "from shapely.geometry import box, Polygon, Point, LineString\n", "from scipy.spatial import Voronoi, voronoi_plot_2d" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:32:52.819000Z", "start_time": "2019-04-13T20:32:52.817000Z" } }, "outputs": [], "source": [ "mpl.rcParams['font.family'] = 'Open Sans'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:32:53.392000Z", "start_time": "2019-04-13T20:32:53.386000Z" } }, "outputs": [], "source": [ "# Population sizes of the regions in the Venn diagram\n", "\n", "# Just A\n", "# A - B - C\n", "just_a = 70\n", "\n", "# Just B\n", "# B - C - A\n", "just_b = 17\n", "\n", "# Just C\n", "# C - B - A\n", "just_c = 85\n", "\n", "# A ^ B\n", "a_intersection_b = 3\n", "\n", "# A ^ C\n", "a_intersection_c = 5\n", "\n", "# B ^ C\n", "b_intersection_c = 60\n", "\n", "# A ^ B ^ C\n", "a_intersection_b_intersection_c = 15\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:32:54.071000Z", "start_time": "2019-04-13T20:32:54.066000Z" } }, "outputs": [], "source": [ "a_x, a_y, a_r = 0,1,1.2\n", "b_x, b_y, b_r = -.5,0,1.2\n", "c_x, c_y, c_r = .5,0,1.2\n", "\n", "A = Point(a_x, a_y).buffer(a_r)\n", "B = Point(b_x, b_y).buffer(b_r)\n", "C = Point(c_x, c_y).buffer(c_r)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:32:56.593000Z", "start_time": "2019-04-13T20:32:56.586000Z" } }, "outputs": [], "source": [ "def random_points_within(shapely_poly, num_points, min_distance_from_edge=0.05):\n", " shapely_poly = shapely_poly.buffer(-1*min_distance_from_edge)\n", " min_x, min_y, max_x, max_y = shapely_poly.bounds\n", "\n", " points = []\n", "\n", " while len(points) < num_points:\n", " random_point = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])\n", " if (random_point.within(shapely_poly)):\n", " points.append(np.array(random_point.coords.xy).T)\n", "\n", " points = np.vstack(points)\n", " return points" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:36:51.609000Z", "start_time": "2019-04-13T20:36:50.596000Z" } }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot A\n", "plt.plot(np.array(A.boundary.coords.xy).T[:,0], np.array(A.boundary.coords.xy).T[:,1], color=(0.855,0.314,0.196,1.0))\n", "plt.gca().add_patch(Circle((a_x, a_y), a_r, zorder=0, lw=2, edgecolor=(0.855,0.314,0.196,1.0), color=(0.855,0.314,0.196,.3)))\n", "plt.text(0,2.3,\"Spanish\", ha='center', color=(.36,.36,.36))\n", "\n", "# plot B\n", "plt.plot(np.array(B.boundary.coords.xy).T[:,0], np.array(B.boundary.coords.xy).T[:,1], color=(0.855,0.314,0.196,1.0))\n", "plt.gca().add_patch(Circle((b_x, b_y), b_r, zorder=0, lw=2, edgecolor=(0.855,0.314,0.196,1.0), color=(0.855,0.314,0.196,.3)))\n", "plt.text(-1.6,-0.6,\"Chemistry\", ha='right', color=(.36,.36,.36))\n", "\n", "# plot C\n", "plt.plot(np.array(C.boundary.coords.xy).T[:,0], np.array(C.boundary.coords.xy).T[:,1], color=(0.855,0.314,0.196,1.0))\n", "plt.gca().add_patch(Circle((c_x, c_y), c_r, zorder=0, lw=2, edgecolor=(0.855,0.314,0.196,1.0), color=(0.855,0.314,0.196,.3)))\n", "plt.text(1.6,-0.6,\"Maths\", ha='left', color=(.36,.36,.36))\n", "\n", "\n", "# Plot the population represented by 100 dots\n", "\n", "rand_x_range = (-2,2)\n", "rand_y_range = (-1.5,2.5)\n", "scatter_kwargs = {'color': (.36,.36,.36),\n", " 's': 5}\n", "\n", "# Plot just A\n", "points = random_points_within(A.difference(B).difference(C), just_a)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", " \n", "# plot just B\n", "points = random_points_within(B.difference(A).difference(C), just_b)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", "\n", "# plot just C\n", "points = random_points_within(C.difference(A).difference(B), just_c)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", "\n", "# plot A ^ B\n", "points = random_points_within(A.intersection(B).difference(C), a_intersection_b)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", "\n", "# plot A ^ C\n", "points = random_points_within(A.intersection(C).difference(B), a_intersection_c)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", "\n", "# plot B ^ C\n", "points = random_points_within(B.intersection(C).difference(A), b_intersection_c)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", "\n", "# plot A ^ B ^ C\n", "points = random_points_within(A.intersection(B).intersection(C), a_intersection_c)\n", "plt.scatter(points[:,0],points[:,1], **scatter_kwargs)\n", "\n", "# Fine tune the presentation of the graph\n", "plt.axes().set_aspect('equal', 'datalim')\n", "plt.gca().axis('off')\n", "plt.xlim(-3.5,3.5)\n", "plt.ylim(-1.5,2.5)\n", "plt.gcf().set_size_inches(6,5)\n", "plt.title('A level subjects chosen', color=(.36,.36,.36))\n", "\n", "# Save the output\n", "plt.savefig('unrelaxed_Venn.png', dpi=600)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:32:58.394000Z", "start_time": "2019-04-13T20:32:58.392000Z" } }, "source": [ "# With bounded Lloyd relaxation" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:33:02.124000Z", "start_time": "2019-04-13T20:33:02.115000Z" } }, "outputs": [], "source": [ "def apply_bounded_lloyd_relaxation(points, boundary, iterations=5):\n", " points_to_use = points.copy()\n", "\n", " for i in range(iterations):\n", " vor = Voronoi(np.vstack([points_to_use, boundary]))\n", " relevant_regions = vor.regions\n", " relevant_regions = [a for a in relevant_regions if (-1 not in a) and len(a) > 0]\n", " relevant_regions = [vor.regions[x] for x in vor.point_region[:len(points)]] # Beta code\n", " regions_coordinates = [np.vstack([vor.vertices[x] for x in region]) for region in relevant_regions]\n", " region_centroids = np.array([Polygon(region).centroid.bounds[:2] for region in regions_coordinates])\n", " points_to_use = region_centroids\n", "\n", " return(points_to_use)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2019-04-13T20:35:30.821000Z", "start_time": "2019-04-13T20:35:27.387000Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot A\n", "plt.plot(np.array(A.boundary.coords.xy).T[:,0], np.array(A.boundary.coords.xy).T[:,1], color=(0.855,0.314,0.196,1.0))\n", "plt.gca().add_patch(Circle((a_x, a_y), a_r, zorder=0, lw=2, edgecolor=(0.855,0.314,0.196,1.0), color=(0.855,0.314,0.196,.3)))\n", "plt.text(0,2.3,\"Spanish\", ha='center', color=(.36,.36,.36))\n", "\n", "# plot B\n", "plt.plot(np.array(B.boundary.coords.xy).T[:,0], np.array(B.boundary.coords.xy).T[:,1], color=(0.855,0.314,0.196,1.0))\n", "plt.gca().add_patch(Circle((b_x, b_y), b_r, zorder=0, lw=2, edgecolor=(0.855,0.314,0.196,1.0), color=(0.855,0.314,0.196,.3)))\n", "plt.text(-1.6,-0.6,\"Chemistry\", ha='right', color=(.36,.36,.36))\n", "\n", "# plot C\n", "plt.plot(np.array(C.boundary.coords.xy).T[:,0], np.array(C.boundary.coords.xy).T[:,1], color=(0.855,0.314,0.196,1.0))\n", "plt.gca().add_patch(Circle((c_x, c_y), c_r, zorder=0, lw=2, edgecolor=(0.855,0.314,0.196,1.0), color=(0.855,0.314,0.196,0.3)))\n", "plt.text(1.6,-0.6,\"Maths\", ha='left', color=(.36,.36,.36))\n", "\n", "\n", "# Plot the population\n", "\n", "rand_x_range = (-2,2)\n", "rand_y_range = (-1.5,2.5)\n", "scatter_kwargs = {'color': (.36,.36,.36),\n", " 's': 5}\n", "\n", "\n", "\n", "# Plot just A\n", "points = random_points_within(A.difference(B).difference(C), just_a)\n", "boundary = A.difference(B).difference(C).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs) \n", " \n", "\n", "# plot just B\n", "points = random_points_within(B.difference(A).difference(C), just_b)\n", "boundary = B.difference(A).difference(C).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs) \n", " \n", " \n", "# plot just C\n", "points = random_points_within(C.difference(A).difference(B), just_c)\n", "boundary = C.difference(B).difference(A).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs) \n", "\n", "\n", "# plot A ^ B\n", "points = random_points_within(A.intersection(B).difference(C), a_intersection_b)\n", "boundary = A.intersection(B).difference(C).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs)\n", " \n", "# plot A ^ C\n", "points = random_points_within(A.intersection(C).difference(B), a_intersection_c)\n", "boundary = A.intersection(C).difference(B).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs)\n", " \n", "# plot B ^ C\n", "points = random_points_within(B.intersection(C).difference(A), b_intersection_c)\n", "boundary = B.intersection(C).difference(A).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs)\n", "\n", "\n", "# plot A ^ B ^ C\n", "points = random_points_within(A.intersection(B).intersection(C), a_intersection_b_intersection_c)\n", "boundary = A.intersection(B).intersection(C).boundary\n", "boundary_coordinates = np.array(boundary.coords.xy).T\n", "relaxed_points = apply_bounded_lloyd_relaxation(points, boundary_coordinates, iterations=100)\n", "plt.scatter(relaxed_points[:,0], relaxed_points[:,1], **scatter_kwargs)\n", " \n", "\n", "# Fine tune the presentation of the graph\n", "plt.axes().set_aspect('equal', 'datalim')\n", "plt.gca().axis('off')\n", "plt.xlim(-3.5,3.5)\n", "plt.ylim(-1.5,2.5)\n", "plt.gcf().set_size_inches(6,5)\n", "plt.title('A level subjects chosen', color=(.36,.36,.36))\n", "\n", "# Save the output\n", "plt.savefig('Venn.png', dpi=600)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }