{"id":13426677,"url":"https://github.com/d3/d3-voronoi","last_synced_at":"2025-03-15T21:31:44.790Z","repository":{"id":34513119,"uuid":"38454823","full_name":"d3/d3-voronoi","owner":"d3","description":"Compute the Voronoi diagram of a set of two-dimensional points.","archived":true,"fork":false,"pushed_at":"2019-10-01T05:35:52.000Z","size":129,"stargazers_count":250,"open_issues_count":4,"forks_count":65,"subscribers_count":23,"default_branch":"master","last_synced_at":"2024-04-04T07:46:38.231Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/d3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-02T20:15:40.000Z","updated_at":"2024-03-20T15:18:54.000Z","dependencies_parsed_at":"2022-08-29T08:50:57.848Z","dependency_job_id":null,"html_url":"https://github.com/d3/d3-voronoi","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3%2Fd3-voronoi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3%2Fd3-voronoi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3%2Fd3-voronoi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3%2Fd3-voronoi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d3","download_url":"https://codeload.github.com/d3/d3-voronoi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240494857,"owners_count":19810504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T00:01:40.992Z","updated_at":"2025-03-15T21:31:44.512Z","avatar_url":"https://github.com/d3.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# d3-voronoi\n\n**Deprecation notice**: Consider using the newer [d3-delaunay](https://github.com/d3/d3-delaunay) instead of d3-voronoi. Based on [Delaunator](https://github.com/mapbox/delaunator), d3-delaunay is 5-10× faster than d3-voronoi to construct the Delaunay triangulation or the Voronoi diagram, is more robust numerically, has Canvas rendering built-in, allows traversal of the Delaunay graph, and a variety of other improvements.\n\n---\n\nThis module implements [Steven J. Fortune’s algorithm](https://en.wikipedia.org/wiki/Fortune's_algorithm) for computing the [Voronoi diagram](https://en.wikipedia.org/wiki/Voronoi_diagram) or [Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation) of a set of two-dimensional points. This implementation is largely based on [work by Raymond Hill](http://www.raymondhill.net/voronoi/rhill-voronoi.html).\n\nVoronoi diagrams are not only [visually](http://bl.ocks.org/mbostock/4360892) [attractive](http://bl.ocks.org/mbostock/4636377) but practical tools for interaction, such as to increase the target area of points in a scatterplot. See [“Strikeouts on the Rise”](http://www.nytimes.com/interactive/2013/03/29/sports/baseball/Strikeouts-Are-Still-Soaring.html) in *The New York Times* and this [multi-line chart](http://bl.ocks.org/mbostock/8033015) for examples; also see Tovi Grossman’s paper on [bubble cursors](http://www.tovigrossman.com/BubbleCursor) for a related technique. Voronoi diagrams can also be used to [automate label positioning](http://bl.ocks.org/mbostock/6909318), and Delaunay meshes are useful in computing adjacency or grouping of visual elements.\n\n\u003ca href=\"http://bl.ocks.org/mbostock/6675193\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/6675193/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/4060366\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/4060366/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/4341156\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/4341156/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/4360892\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/4360892/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/7608400\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/7608400/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/4636377\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/4636377/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/1073373\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/1073373/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/8033015\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/8033015/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/c6966db1fcb0ed2988da\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/c6966db1fcb0ed2988da/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\u003ca href=\"http://bl.ocks.org/mbostock/ec10387f24c1fad2acac3bc11eb218a5\"\u003e\u003cimg src=\"http://bl.ocks.org/mbostock/raw/ec10387f24c1fad2acac3bc11eb218a5/thumbnail.png\" width=\"202\"\u003e\u003c/a\u003e\n\n## Installing\n\nIf you use NPM, `npm install d3-voronoi`. Otherwise, download the [latest release](https://github.com/d3/d3-voronoi/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-voronoi.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:\n\n```html\n\u003cscript src=\"https://d3js.org/d3-voronoi.v1.min.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n\nvar voronoi = d3.voronoi();\n\n\u003c/script\u003e\n```\n\n[Try d3-voronoi in your browser.](https://tonicdev.com/npm/d3-voronoi)\n\n## API Reference\n\n\u003ca name=\"voronoi\" href=\"#voronoi\"\u003e#\u003c/a\u003e d3.\u003cb\u003evoronoi\u003c/b\u003e() [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js \"Source\")\n\nCreates a new Voronoi layout with default [*x*-](#voronoi_x) and [*y*-](#voronoi_y) accessors and a null [extent](#voronoi_extent).\n\n\u003ca name=\"_voronoi\" href=\"#_voronoi\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e(\u003ci\u003edata\u003c/i\u003e) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L10 \"Source\")\n\nComputes the [Voronoi diagram](#voronoi-diagrams) for the specified *data* points.\n\n\u003ca name=\"voronoi_x\" href=\"#voronoi_x\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003ex\u003c/b\u003e([\u003ci\u003ex\u003c/i\u003e]) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L31 \"Source\")\n\nIf *x* is specified, sets the *x*-coordinate accessor. If *x* is not specified, returns the current *x*-coordinate accessor, which defaults to:\n\n```js\nfunction x(d) {\n  return d[0];\n}\n```\n\n\u003ca name=\"voronoi_y\" href=\"#voronoi_y\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003ey\u003c/b\u003e([\u003ci\u003ey\u003c/i\u003e]) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L35 \"Source\")\n\nIf *y* is specified, sets the *y*-coordinate accessor. If *y* is not specified, returns the current *y*-coordinate accessor, which defaults to:\n\n```js\nfunction y(d) {\n  return d[1];\n}\n```\n\n\u003ca name=\"voronoi_extent\" href=\"#voronoi_extent\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003eextent\u003c/b\u003e([\u003ci\u003eextent\u003c/i\u003e]) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L39 \"Source\")\n\nIf *extent* is specified, sets the clip extent of the Voronoi layout to the specified bounds and returns the layout. The *extent* bounds are specified as an array \\[\\[\u003ci\u003ex0\u003c/i\u003e, \u003ci\u003ey0\u003c/i\u003e\\], \\[\u003ci\u003ex1\u003c/i\u003e, \u003ci\u003ey1\u003c/i\u003e\\]\\], where \u003ci\u003ex0\u003c/i\u003e is the left side of the extent, \u003ci\u003ey0\u003c/i\u003e is the top, \u003ci\u003ex1\u003c/i\u003e is the right and \u003ci\u003ey1\u003c/i\u003e is the bottom. If *extent* is not specified, returns the current clip extent which defaults to null. A clip extent is required when using [*voronoi*.polygons](#voronoi_polygons).\n\n\u003ca name=\"voronoi_size\" href=\"#voronoi_size\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003esize\u003c/b\u003e([\u003ci\u003esize\u003c/i\u003e]) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L43 \"Source\")\n\nAn alias for [*voronoi*.extent](#voronoi_extent) where the minimum *x* and *y* of the extent are ⟨0,0⟩. Equivalent to:\n\n```js\nvoronoi.extent([[0, 0], size]);\n```\n\n\u003ca name=\"voronoi_polygons\" href=\"#voronoi_polygons\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003epolygons\u003c/b\u003e(\u003ci\u003edata\u003c/i\u003e) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L19 \"Source\")\n\nReturns a sparse array of polygons, one for each unique input point in the specified *data* points, corresponding to the cells in the computed Voronoi diagram. Equivalent to:\n\n```js\nvoronoi(data).polygons();\n```\n\nSee [*diagram*.polygons](#diagram_polygons) for more detail. Note: an [extent](#voronoi_extent) is required.\n\n\u003ca name=\"voronoi_triangles\" href=\"#voronoi_triangles\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003etriangles\u003c/b\u003e(\u003ci\u003edata\u003c/i\u003e) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L27 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of triangles. Each triangle is a three-element array of elements from *data*. Equivalent to:\n\n```js\nvoronoi(data).triangles();\n```\n\nSee [*diagram*.triangles](#diagram_triangles) for more detail.\n\n\u003ca name=\"voronoi_links\" href=\"#voronoi_links\"\u003e#\u003c/a\u003e \u003ci\u003evoronoi\u003c/i\u003e.\u003cb\u003elinks\u003c/b\u003e(\u003ci\u003edata\u003c/i\u003e) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/voronoi.js#L23 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of links. Each link has `source` and `target` attributes referring to elements in *data*. Equivalent to:\n\n```js\nvoronoi(data).links();\n```\n\nSee [*diagram*.links](#diagram_links) for more detail.\n\n### Voronoi Diagrams\n\n\u003ca name=\"diagram\" href=\"#diagram\"\u003e#\u003c/a\u003e \u003ci\u003ediagram\u003c/i\u003e [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js \"Source\")\n\nThe computed Voronoi diagram returned by [*voronoi*](#_voronoi) has the following properties:\n\n* `edges` - an array of [edges](#diagram_edge).\n* `cells` - a sparse array of [cells](#diagram_cell), one for each unique input point.\n\nFor each set of coincident input points, one of the points is chosen arbitrarily and assigned the associated cell; the other coincident input points’ entries are missing from the returned sparse array.\n\n\u003ca name=\"diagram_polygons\" href=\"#diagram_polygons\"\u003e#\u003c/a\u003e \u003ci\u003ediagram\u003c/i\u003e.\u003cb\u003epolygons\u003c/b\u003e() [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L72 \"Source\")\n\nReturns a sparse array of polygons clipped to the [*extent*](#voronoi_extent), one for each cell (each unique input point) in the diagram. Each polygon is represented as an array of points \\[*x*, *y*\\] where *x* and *y* are the point coordinates, and a `data` field that refers to the corresponding element in *data*. Polygons are open: they do not contain a closing point that duplicates the first point; a triangle, for example, is an array of three points. Polygons are also counterclockwise, assuming the origin ⟨0,0⟩ is in the top-left corner.\n\nFor each set of coincident input points, one of the points is chosen arbitrarily and assigned the associated polygon; the other coincident input points’ entries are missing from the returned sparse array.\n\n\u003ca name=\"diagram_triangles\" href=\"#diagram_triangles\"\u003e#\u003c/a\u003e \u003ci\u003ediagram\u003c/i\u003e.\u003cb\u003etriangles\u003c/b\u003e() [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L82 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of triangles. Each triangle is a three-element array of elements from *data*. Since the triangulation is computed as the dual of the Voronoi diagram, and the Voronoi diagram is clipped by the [extent](#voronoi_extent), a subset of the Delaunay triangulation is returned.\n\n\u003ca name=\"diagram_links\" href=\"#diagram_links\"\u003e#\u003c/a\u003e \u003ci\u003ediagram\u003c/i\u003e.\u003cb\u003elinks\u003c/b\u003e() [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L108 \"Source\")\n\nReturns the Delaunay triangulation of the specified *data* array as an array of links, one for each edge in the mesh. Each link has the following attributes:\n\n* `source` - the source node, an element in *data*.\n* `target` - the target node, an element in *data*.\n\nSince the triangulation is computed as the dual of the Voronoi diagram, and the Voronoi diagram is clipped by the [extent](#voronoi_extent), a subset of the Delaunay links is returned.\n\n\u003ca name=\"diagram_find\" href=\"#diagram_find\"\u003e#\u003c/a\u003e \u003ci\u003ediagram\u003c/i\u003e.\u003cb\u003efind\u003c/b\u003e(\u003ci\u003ex\u003c/i\u003e, \u003ci\u003ey\u003c/i\u003e[, \u003ci\u003eradius\u003c/i\u003e]) [\u003c\u003e](https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L119 \"Source\")\n\nReturns the nearest site to point \\[*x*, *y*\\]. If *radius* is specified, only sites within *radius* distance are considered.\n\nSee Philippe Rivière’s [bl.ocks.org/1b7ddbcd71454d685d1259781968aefc](http://bl.ocks.org/Fil/1b7ddbcd71454d685d1259781968aefc) for an example.\n\n\u003ca name=\"cell\" href=\"#cell\"\u003e#\u003c/a\u003e \u003ci\u003ecell\u003c/i\u003e\n\nEach cell in the diagram is an object with the following properties:\n\n* `site` - the [site](#site) of the cell’s associated input point.\n* `halfedges` - an array of indexes into [*diagram*.edges](#diagram) representing the cell’s polygon.\n\n\u003ca name=\"site\" href=\"#site\"\u003e#\u003c/a\u003e \u003ci\u003esite\u003c/i\u003e\n\nEach site in the diagram is an array \\[*x*, *y*\\] with two additional properties:\n\n* `index` - the site’s index, corresponding to the associated input point.\n* `data` - the input data corresponding to this site.\n\n\u003ca name=\"edge\" href=\"#edge\"\u003e#\u003c/a\u003e \u003ci\u003eedge\u003c/i\u003e\n\nEach edge in the diagram is an array \\[\\[*x0*, *y0*\\], \\[*x1*, *y1*\\]\\] with two additional properties:\n\n* `left` - the [site](#site) on the left side of the edge.\n* `right` - the [site](#site) on the right side of the edge; null for a clipped border edge.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd3%2Fd3-voronoi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd3%2Fd3-voronoi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd3%2Fd3-voronoi/lists"}