{"id":20714719,"url":"https://github.com/justingosses/parallelsets_gameofthrones","last_synced_at":"2026-04-19T08:32:02.777Z","repository":{"id":91734590,"uuid":"65700481","full_name":"JustinGOSSES/ParallelSets_GameOfThrones","owner":"JustinGOSSES","description":"Parallel Sets Data Visualization of Game of Thrones Battles Years 298-300","archived":false,"fork":false,"pushed_at":"2018-10-10T14:59:39.000Z","size":1734,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-11T06:50:19.733Z","etag":null,"topics":["d3js","game-of-thrones","parallel-sets"],"latest_commit_sha":null,"homepage":"https://justingosses.github.io/ParallelSets_GameOfThrones/","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/JustinGOSSES.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-15T03:06:49.000Z","updated_at":"2018-10-10T14:59:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"65a2a905-4bc1-405c-a0e0-c60f8a5f5da2","html_url":"https://github.com/JustinGOSSES/ParallelSets_GameOfThrones","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JustinGOSSES/ParallelSets_GameOfThrones","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FParallelSets_GameOfThrones","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FParallelSets_GameOfThrones/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FParallelSets_GameOfThrones/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FParallelSets_GameOfThrones/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JustinGOSSES","download_url":"https://codeload.github.com/JustinGOSSES/ParallelSets_GameOfThrones/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FParallelSets_GameOfThrones/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32000204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["d3js","game-of-thrones","parallel-sets"],"created_at":"2024-11-17T02:33:46.754Z","updated_at":"2026-04-19T08:32:02.758Z","avatar_url":"https://github.com/JustinGOSSES.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# d3.parsets.userFilt\n\n\u003cb\u003eAn interactive parallel sets visualisation using D3.js.\u003c/b\u003e\n\n### Justin Gosses, 2016\n\nParallel Set Visualizations are a great way to show relationships and distribution in a dataset with many shared categorical data dimensions, but they can quickly become a visual mess if they have too many dimensions or too many unique categories for each dimension. \n\n#### This is an attempt to minimize that problem by adding some UI features that let the user :\n####    1. Choose which dimensions to show\n####    2. Limit the data shown to data that matches certain values for certain dimensions\n\n#### These changes move this parallel set visualization into more a data exploration tool. \n\n### This project is live \u003ca href=\"https://justingosses.github.io/ParallelSets_GameOfThrones/\"\u003eas a githib.io webpage\u003c/a\u003e.\n\nThis project builds upon [d3.parsets](http://www.jasondavies.com/parallel-sets/) by Jason Davies, which was based on the GUI [Parallel Sets](http://eagereyes.org/parallel-sets) by Robert Kosara and Caroline Ziemkiewicz. \n\n#### More Information:\nMore information can be found in a \u003ca href=\"www.justingosses.com/parallelsets\"\u003eblog\u003c/a\u003e post and on \u003ca href=\"https://github.com/JustinGOSSES/ParallelSets_GameOfThrones\"\u003egithub\u003c/a\u003e. \n\n#### Notes:\n\n   - This application uses a tooltip function that conflicts with the bootstrap toolstrap namespace. If you're going to use bootstrap, one way around this is to only use a subset of the bootstrap CSS which excludes tooltip information.\n   - Some functions were created to handle spaces and special characters in input data, but there is still possibilities of problems there. \n\n\n![alt tag](/images/ScreenShotReadMe.png)\n=====================================================\n\n### This section applies to the d3.parsets.userFilt.js file\n\n\u003ca name=\"userFilt_dimension_options\" href=\"#userFilt\"\u003e#\u003c/a\u003e userFilt.\u003cb\u003edimension_options\u003c/b\u003e\n\nIs an array that contains the various categories or dimensions the user can pick from to be visualized. These will be the column headers in the input CSV.\n\n\u003ca name=\"userFilt_selected_options\" href=\"#userFilt\"\u003e#\u003c/a\u003e userFilt.\u003cb\u003eselected_options\u003c/b\u003e\n\nThis is an array of the dimensions options chosen to the visualized. It is a subset of the dimension options array. This array is populated initially in the code and then modified by the user via a drop-down menu. \n\n\u003ca name=\"userFilt_limitations\" href=\"#userFilt\"\u003e#\u003c/a\u003e userFilt.\u003cb\u003elimitations\u003c/b\u003e\n\nThis is an object consisting of multiple key value pairs where the key is a dimension and the value is an array of values for that dimension. In the situation where the user wants to visualize only some of the values in a given dimension, they are populated and depopulated in here. If they are present, that means the resulting data being given to the parallel sets visualization is limited to the data that matches those vaues for that dimension. For example, it can be limited to only battles that involve the House of Stark as a defender. \n\n\u003ca name=\"userFilt_uniqueValuesForEachDimensionArrayOfObj\" href=\"#userFilt\"\u003e#\u003c/a\u003e userFilt.\u003cb\u003euniqueValuesForEachDimensionArrayOfObj\u003c/b\u003e\n\n This is an array of all unique values for each dimension, used to populate secondary drop-down menu\n\n\u003ca name=\"userFilt_state\" href=\"#userFilt\"\u003e#\u003c/a\u003e userFilt.\u003cb\u003estate\u003c/b\u003e\n\n Object that keeps track of how many times the visualization has been rebuilt.\n\n\n=====================================================\n\n### This section applies to the d3.parsets.js file\n\nDocumentation below directly copied from https://github.com/jasondavies/d3-parsets\n\n### API\n\n\u003ca name=\"d3_parsets\" href=\"#d3_parsets\"\u003e#\u003c/a\u003e d3.\u003cb\u003eparsets\u003c/b\u003e()\n\nCreates a new parallel sets chart with default settings: dimensions are automatically detected and the size is 960×600. The chart is a function that can be called on any D3 selection that has data bound to it.  This function can be configured as described below.\n\n\u003ca name=\"parsets_dimensions\" href=\"#parsets_dimensions\"\u003e#\u003c/a\u003e parsets.\u003cb\u003edimensions\u003c/b\u003e(\u003ci\u003edimensions\u003c/i\u003e)\n\nIf *dimensions* is specified, sets the categorical dimensions to be visualised. If a function is specified, it is invoked for every element in the target selection and an array of dimension names is expected in return. If an array is specified, it should be an array of dimension names (object keys).\n\nIf *dimensions* is not specified, returns the current dimensions.\n\n\u003ca name=\"parsets_value\" href=\"#parsets_value\"\u003e#\u003c/a\u003e parsets.\u003cb\u003evalue\u003c/b\u003e(\u003ci\u003evalue\u003c/i\u003e)\n\nSpecifies the value accessor. If *value* is not specified, returns the current value accessor. The default accessor simply returns 1 for each input data element i.e. the absolute frequency count. This value is used to set the width of the horizontal bars and connecting ribbons in proportion to the value.\n\nIf the input data is a pivot table, you’ll want to set this to return the aggregate sum for each input data element.  You could also use an arbitrary numerical measure instead of frequency if appropriate.\n\n\u003ca name=\"parsets_width\" href=\"#parsets_width\"\u003e#\u003c/a\u003e parsets.\u003cb\u003ewidth\u003c/b\u003e(\u003ci\u003ewidth\u003c/i\u003e)\n\nSpecifies the chart width in pixels. If *width* is not specified, returns the current width, which defaults to 960.\n\n\u003ca name=\"parsets_height\" href=\"#parsets_height\"\u003e#\u003c/a\u003e parsets.\u003cb\u003eheight\u003c/b\u003e(\u003ci\u003eheight\u003c/i\u003e)\n\nSpecifies the chart height in pixels. If *height* is not specified, returns the current height, which defaults to 600.\n\nIf a negative height is specified, this causes the dimensions to be reversed vertically, and you need to set the appropriate translate transform in the chart’s parent `\u003cg\u003e` element.\n\n\u003ca name=\"parsets_spacing\" href=\"#parsets_spacing\"\u003e#\u003c/a\u003e parsets.\u003cb\u003espacing\u003c/b\u003e(\u003ci\u003espacing\u003c/i\u003e)\n\nSpecifies the total amount of spacing in pixels to be divided between the horizontal category bars. If *spacing* is not specified, returns the current spacing, which defaults to 20.\n\n\u003ca name=\"parsets_tension\" href=\"#parsets_tension\"\u003e#\u003c/a\u003e parsets.\u003cb\u003etension\u003c/b\u003e(\u003ci\u003etension\u003c/i\u003e)\n\nSpecifies the tension for the ribbon curves. This should be a value between 0 and 1 inclusive. If *tension* is not specified, returns the current tension, which defaults to 1 (straight lines).\n\n\u003ca name=\"parsets_duration\" href=\"#parsets_duration\"\u003e#\u003c/a\u003e parsets.\u003cb\u003eduration\u003c/b\u003e(\u003ci\u003eduration\u003c/i\u003e)\n\nSpecifies the duration for the animated transitions in milliseconds. If *duration* is not specified, returns the current duration, which defaults to 500.\n\n\u003ca name=\"parsets_dimensionFormat\" href=\"#parsets_dimensionFormat\"\u003e#\u003c/a\u003e parsets.\u003cb\u003edimensionFormat\u003c/b\u003e(\u003ci\u003edimensionFormat\u003c/i\u003e)\n\nSpecifies a formatting function for the dimension name. If *dimensionFormat* is not specified, returns the current formatting function, which defaults to \u003ccode\u003eString\u003c/code\u003e.\n\n\u003ca name=\"parsets_tooltip\" href=\"#parsets_tooltip\"\u003e#\u003c/a\u003e parsets.\u003cb\u003etooltip\u003c/b\u003e(\u003ci\u003etooltip\u003c/i\u003e)\n\nSpecifies a formatting function for the ribbon tooltip. If *tooltip* is not specified, returns the current formatting function, which defaults to:\n\n    function(d) {\n      var count = d.count,\n          path = [];\n      while (d.parent) {\n        if (d.name) path.unshift(d.name);\n        d = d.parent;\n      }\n      return path.join(\" → \") + \"\u003cbr\u003e\" + comma(count) + \" (\" + percent(count / d.count) + \")\";\n    }\n\n\u003ca name=\"parsets_categoryTooltip\" href=\"#parsets_categoryTooltip\"\u003e#\u003c/a\u003e parsets.\u003cb\u003ecategoryTooltip\u003c/b\u003e(\u003ci\u003ecategoryTooltip\u003c/i\u003e)\n\nSpecifies a formatting function for the category tooltip. If *categoryTooltip* is not specified, returns the current formatting function, which defaults to:\n\n    function(d) {\n      return d.name + \"\u003cbr\u003e\" + comma(d.count) + \" (\" + percent(d.count / d.dimension.count) + \")\";\n    }\n\n\u003ca name=\"parsets_on\" href=\"#parsets_on\"\u003e#\u003c/a\u003e parsets.\u003cb\u003eon\u003c/b\u003e(\u003ci\u003etype\u003c/i\u003e, \u003ci\u003elistener\u003c/i\u003e)\n\nRegisters the specified \u003ci\u003elistener\u003c/i\u003e to receive events of the specified \u003ci\u003etype\u003c/i\u003e from the chart.  Currently, this includes \"sortDimensions\" and \"sortCategories\", which are fired when dimensions or categories are reordered.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustingosses%2Fparallelsets_gameofthrones","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustingosses%2Fparallelsets_gameofthrones","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustingosses%2Fparallelsets_gameofthrones/lists"}