{"id":79881,"date":"2017-10-11T08:00:12","date_gmt":"2017-10-11T08:00:12","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/products\/product\/uncategorized\/thematic-point-clustering-for-data-exploration\/"},"modified":"2018-05-11T18:12:32","modified_gmt":"2018-05-11T18:12:32","slug":"thematic-point-clustering-for-data-exploration","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration","title":{"rendered":"Thematic point clustering for data exploration"},"author":6561,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[22941],"tags":[24311,26751,34601,30111,24921,27491,34711,31291,26521],"industry":[],"product":[36831,36601],"class_list":["post-79881","blog","type-blog","status-publish","format-standard","hentry","category-mapping","tag-analysis","tag-clustering","tag-data-exploration","tag-data-visualization","tag-javascript","tag-jsapi4","tag-points","tag-renderers","tag-visualization","product-js-api-arcgis","product-developers"],"acf":{"short_description":"Extracting meaningful information from large or dense point datasets can be challenging. Sometimes many points aren't visible because the...","flexible_content":[{"acf_fc_layout":"content","content":"<p>Extracting meaningful information from large or dense point datasets can be challenging. Sometimes many points aren&#8217;t visible because they&#8217;re stacked on top of one another. Some datasets contain sparse data in some locations, but very dense data in others. Visualizations of attribute data with color or size in these scenarios can be difficult to digest. Zoom out to smaller scales and all of these problems are compounded. <a href=\"https:\/\/blogs.esri.com\/esri\/arcgis\/2017\/09\/29\/arcgis-api-for-javascript-version-4-5-released\/\">Version 3.22 of the ArcGIS API for JavaScript<\/a> introduced <a href=\"https:\/\/blogs.esri.com\/esri\/arcgis\/2017\/09\/20\/clustering-now-available-in-arcgis-online\/\">point clustering<\/a> to help solve some of these problems. It allows you to <strong>reduce and summarize<\/strong> relatively large numbers of data points in the map, providing some <strong>insight to geographic patterns<\/strong> in the data. These clusters are <strong>scale-dependent<\/strong>, meaning both their size and color change appropriately as the view scale changes.<\/p>\n<p>Perhaps the most compelling piece of the ArcGIS clustering implementation is its separation from the layer&#8217;s renderer. Clustering is enabled on the layer, not the renderer, which means that <strong>all rendering properties are retained by the layer when clustering is enabled<\/strong>. Once enabled, the popup of each cluster will summarize the attribute used to drive the visualization of each feature. The color and the size of each cluster is determined based on the average or predominant value of the features comprising the cluster. Therefore you can use clustering as a tool for summarizing potential spatial patterns in data exploration apps.<\/p>\n<figure id=\"attachment_88127\" aria-describedby=\"caption-attachment-88127\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/1-summary-popup.png\" alt=\"\" width=\"1024\" height=\"643\" class=\"size-full wp-image-88127 noIMGBackground\" \/><\/a><figcaption id=\"caption-attachment-88127\" class=\"wp-caption-text\">Clustering in the ArcGIS API for JavaScript is enabled outside the renderer, so clusters retain renderer properties and summarize the variable of interest on a cluster-by-cluster basis. In the example above, New York City 311 calls are visualized by the time of day each incident was reported. Cluster colors indicate the predominant time of day incidents were reported among features comprising the cluster.<\/figcaption><\/figure>\n<h2>Exploring 311 calls in New York City<\/h2>\n<p>I downloaded 311 data from <a href=\"https:\/\/opendata.cityofnewyork.us\/\">New York City\u2019s Open Data site<\/a> and created a <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\">small app for exploring the data<\/a>. While glancing through the available attributes, three date fields caught my attention. They include the date each incident was created, the date it was due, and the date it closed.<\/p>\n<p>Then I wrote three Arcade expressions to dynamically create three new variables of interest, answering the following questions:<\/p>\n<p>Were any incident closures overdue? If so, by how long?<\/p>\n<pre>\r\n<span style=\"color: #998;font-style: italic\">\/\/ Days incident closure was overdue<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> closed = $feature.Closed_Date;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> due = $feature.Due_Date;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> closureDueDiff = DateDiff(closed, due, <span style=\"color: #d14\">\"days\"<\/span>);\r\nIIF(IsEmpty(closed) || IsEmpty(due), <span style=\"color: #008080\">0<\/span>, closureDueDiff);\r\n<\/pre>\n<p>How old were the incidents when closed?<\/p>\n<pre>\r\n<span style=\"color: #998;font-style: italic\">\/\/ Incident report age (days)<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> closed = $feature.Closed_Date;\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> created = $feature.Created_Date;\r\nIIF(IsEmpty(closed) || IsEmpty(created), <span style=\"color: #008080\">0<\/span>, DateDiff(closed, created, <span style=\"color: #d14\">\"days\"<\/span>));\r\n<\/pre>\n<p>At what time of day were the incidents reported?<\/p>\n<pre>\r\n<span style=\"color: #998;font-style: italic\">\/\/ toEasternTime is defined in a previous function<\/span>\r\n<span style=\"color: #998;font-style: italic\">\/\/ that converts the date from UTC to eastern time<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> created = toEasternTime($feature.Created_Date);\r\n\r\n<span style=\"color: #998;font-style: italic\">\/\/ Time of day<\/span>\r\n<span style=\"color: #333;font-weight: bold\">var<\/span> t = Hour(created);\r\nWhen(\r\n  t &gt;= <span style=\"color: #008080\">22<\/span> || t &lt; <span style=\"color: #008080\">6<\/span>, <span style=\"color: #d14\">\"Night\"<\/span>,\r\n  t &gt;= <span style=\"color: #008080\">6<\/span> &amp;&amp; t &lt; <span style=\"color: #008080\">11<\/span>, <span style=\"color: #d14\">\"Morning\"<\/span>,\r\n  t &gt;= <span style=\"color: #008080\">11<\/span> &amp;&amp; t &lt; <span style=\"color: #008080\">13<\/span>, <span style=\"color: #d14\">\"Midday\"<\/span>, \r\n  t &gt;= <span style=\"color: #008080\">13<\/span> &amp;&amp; t &lt; <span style=\"color: #008080\">17<\/span>, <span style=\"color: #d14\">\"Afternoon\"<\/span>,\r\n  t &gt;= <span style=\"color: #008080\">17<\/span> &amp;&amp; t &lt; <span style=\"color: #008080\">22<\/span>, <span style=\"color: #d14\">\"Evening\"<\/span>,\r\n<span style=\"color: #d14\">\"It never happened\"<\/span> );\r\n<\/pre>\n<blockquote><p>The <a href=\"https:\/\/github.com\/ekenes\/esri-js-samples\/blob\/gh-pages\/3\/visualization\/clustering\/arcade-time-reported.txt\">toEasternTime()<\/a> function is a <a href=\"https:\/\/developers.arcgis.com\/arcade\/guide\/logic\/#user-defined-functions\">custom Arcade function<\/a> used to determine the hour an event occurred in the Eastern Time Zone. This assumes all data points were collected in the same time zone in the year 2015.<\/p><\/blockquote>\n<p>Then I created three renderers, each based on one of the above Arcade expressions, and added a select element to the UI to allow the user to dynamically switch visualizations on the layer. I also added a checkbox allowing the user to view the visualization with clustering enabled or disabled.<\/p>\n<p>Additionally, the app allows you to visualize and filter incidents by type. This filter allows us to explore potential spatial patterns based on location, type, or any of the time variables mentioned above.<\/p>\n<p><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\">Check out the app!<\/a><\/p>\n<h2>Data observations<\/h2>\n<p>After <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\">exploring the data<\/a>, it&#8217;s clear how clustering can improve the visualization of points based on a thematic attribute. Take a look at the image comparison below (click the images for a larger view). The renderer depicts the number of days each incident closure was overdue. When clustering is disabled, no obvious pattern emerges. However, once enabled, clustering helps us clearly identify areas where incident closures tend to be overdue more than others. These clustering patterns can be more or less refined as you zoom in and out or adjust the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/featurelayer-amd.html#setfeaturereduction\">clusterRadius<\/a> on the layer.<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"background-color:#DADADA\">No clustering<\/td>\n<td style=\"background-color:#DADADA\">Clustering enabled<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/2-no-cluster-compare.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/2-no-cluster-compare-300x217.png\" alt=\"\" width=\"300\" height=\"217\" class=\"alignnone size-medium wp-image-88130 noIMGBackground\" \/><\/a><\/td>\n<td><a href=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/2-cluster-compare.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/2-cluster-compare-300x211.png\" alt=\"\" width=\"300\" height=\"211\" class=\"alignnone size-medium wp-image-88129 noIMGBackground\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This app also demonstrates how filtering features impacts cluster patterns. As you filter by various complaint types, you will notice not only different spatial patterns emerge, but patterns in the closure times of each incident appear as well. For example, blocked driveways, illegal parking, and noise complaints usually seem to be resolved quickly and on time. Similarly, broken meter complaints tended to be resolved well ahead of schedule.<\/p>\n<p><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/3-meter-complaints1.png\" alt=\"\" width=\"1024\" height=\"751\" class=\"alignnone size-full wp-image-88138 noIMGBackground\" \/><\/a><\/p>\n<p>But graffiti complaints tended to close much later, often well after the assigned due date. Since &#8220;graffiti&#8221; is the most common incident type, it heavily influences the overall visualization of overdue incident closures.<\/p>\n<p><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/4-graffiti-complaints1.png\" alt=\"\" width=\"1024\" height=\"643\" class=\"alignnone size-full wp-image-88139\" \/><\/a><\/p>\n<p>On average, street condition complaints were resolved before or after the due date depending on the location of the complaint.<\/p>\n<p><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/5-street-condition-complaints.png\" alt=\"\" width=\"1024\" height=\"658\" class=\"alignnone size-full wp-image-88135 noIMGBackground\" \/><\/a><\/p>\n<p>The time of day visualizations seemed to follow expectations when filtering by type. For example, noise complaints tended to occur at night, while blocked driveway complaints occurred more often in the morning, evening, and night (when people are more likely to be going in an out the door).<\/p>\n<figure id=\"attachment_88136\" aria-describedby=\"caption-attachment-88136\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2017\/10\/6-blocked-driveway-complaints.png\" alt=\"\" width=\"1024\" height=\"674\" class=\"size-full wp-image-88136 noIMGBackground\" \/><\/a><figcaption id=\"caption-attachment-88136\" class=\"wp-caption-text\">Overall, blocked driveways were reported more often in the mornings, evenings, and nights than at any other time of the day.<\/figcaption><\/figure>\n<h2>Enable clustering in your web apps<\/h2>\n<p>Clustering is managed with the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/featurelayer-amd.html#setfeaturereduction\">featureReduction<\/a> option in FeatureLayer and CSVLayer. You can enable it by simply setting the type to \u201ccluster\u201d in the layer\u2019s <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/featurelayer-amd.html#featurelayer1\">constructor<\/a>\u2026<\/p>\n<pre><span style=\"color: #333;font-weight: bold\">var<\/span> layer = <span style=\"color: #333;font-weight: bold\">new<\/span> FeatureLayer(serviceUrl, {\r\n  featureReduction: {\r\n    type: <span style=\"color: #d14\">\"cluster\"<\/span>\r\n  }\r\n});\r\n<\/pre>\n<p>\u2026or with the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/featurelayer-amd.html#setfeaturereduction\">setFeatureReduction()<\/a> method:<\/p>\n<pre>layer.setFeatureReduction({\r\n  type: <span style=\"color: #d14\">\"cluster\"<\/span>\r\n});\r\n<\/pre>\n<p>There are several other methods and options available for managing clusters and their children features. See the <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jshelp\/whats_new.html\">3.22 release notes<\/a> for more details.<\/p>\n<h2>Leverage the ArcGIS platform<\/h2>\n<p>While the tips mentioned above may help you get started with incorporating clustering in custom data exploration apps, don&#8217;t forget to use the ArcGIS platform to your advantage when possible. You can save yourself time by enabling and configuring clustering options in a web map in ArcGIS Online, and loading it into a custom web application. <a href=\"https:\/\/blogs.esri.com\/esri\/arcgis\/2017\/09\/20\/clustering-now-available-in-arcgis-online\/\">Check out this blog post<\/a>, which provides a nice summary of the various clustering capabilities available in ArcGIS Online.<\/p>\n<h2>A word of caution<\/h2>\n<p>Clustering is useful for summarizing and identifying potential spatial patterns in attributes visualized by a layer&#8217;s renderer. However, keep in mind that every cartographic visualization includes some level of deception and should be questioned. While the visualizations in <a href=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/\">this sample<\/a> show some interesting patterns, <strong><em>they depend solely on my definition of \u201ctime of day\u201d and don\u2019t take into account the spread of features as they occur in time<\/em><\/strong>.<\/p>\n<p>For example, the time frame for \u201cmorning\u201d could be interpreted a number of ways. Does it start at 5 a.m., 6 a.m., or 7 a.m.? When does it end? And regarding the spread of the data, let\u2019s assume that \u201cmorning\u201d is defined as (6 am \u2013 11am) and a predominant \u201cmorning\u201d cluster contains 500 features. Suppose 250 of the incidents comprising the cluster occurred between 10:50 am \u2013 11:00 am and 240 occurred between 11:00 and 11:10. The cluster would correctly depict the data as predominantly occurring in the morning, but it doesn\u2019t reflect the fact that most features occurred in the late morning, much closer to \u201cmidday\u201d than a reasonable person might otherwise assume when viewing this map. Additionally, the visualization doesn&#8217;t indicate the <a href=\"http:\/\/3\/creating-a-predominance-visualization-with-arcade\/\">strength of the predominant value<\/a>.<\/p>\n<p>Zooming in and out at various scales and browsing the features of each cluster will help peel away at the inadvertent deception present in the summarized data.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large\" src=\"http:\/\/ekenes.github.io\/esri-js-samples\/3\/visualization\/clustering\/images\/browse-features.gif\" width=\"640\" height=\"320\" \/><\/p>\n<p>Also note that <strong><em>clustering options available via <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jsapi\/featurelayer-amd.html#setfeaturereduction\">featureReduction<\/a> do not perform complex statistical analyses<\/em><\/strong>. Therefore, the clustering visualizations described above should not be interpreted as precise, statistically significant &#8220;clusters&#8221; of data. Rather, they should merely be approached as a nice summary of the data, providing you with a preview to potentially identify spatial patterns that may or may not reveal significant storylines.<\/p>\n<p>If you require more sophisticated spatial analysis, such as attempting to determine statistically significant hot spots and cold spots, or identify clusters of data, then the ArcGIS platform offers several tools that allow you to accomplish this. In ArcGIS Online, these tools include <a href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/analyze\/aggregate-points.htm\">Aggregate Points<\/a>, <a href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/analyze\/calculate-density.htm\">Calculate Density<\/a>, <a href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/analyze\/find-hot-spots.htm\">Find Hotspots<\/a>, and <a href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/analyze\/find-outliers.htm\">Find Outliers<\/a>. You can also take advantage of the <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/tool-reference\/spatial-statistics\/an-overview-of-the-mapping-clusters-toolset.htm\">cluster toolset in ArcGIS Pro<\/a> for access to additional tools.<\/p>\n<h2>Conclusion<\/h2>\n<p>Because clustering is a client-side feature reduction solution, it has a number of known limitations (see the list below). Server-side clustering will be implemented in a future release, which will improve performance and allow for more features to be clustered. Clustering will be added to the <a href=\"https:\/\/developers.arcgis.com\/javascript\/\">4.x series of the ArcGIS API for JavaScript<\/a> sometime in the near feature. Also <a href=\"https:\/\/developers.arcgis.com\/javascript\/3\/jssamples\/#latest_samples\">check out the samples<\/a> new to the 3.22 documentation demonstrating various ways to implement clustering in your web apps.<\/p>\n<h4>Known Limitations in 3.22<\/h4>\n<ul>\n<li>Support is limited to point data in FeatureLayer (from service or FeatureCollection) and CSVLayer.<\/li>\n<li>The map must have a spatial reference of Web Mercator or WGS84.<\/li>\n<li>If the layer contains more than 50,000 features, then only the first 50,000 will be clustered.<\/li>\n<li>A FeatureLayer created from a service URL must point to a service that supports pagination (ArcGIS Server version 10.3.1 or higher).<\/li>\n<li>When editing is initiated with the Editor widget, then feature reduction is disabled until the Editor widget is destroyed.<\/li>\n<li>Feature reduction is disabled when the layer has one of the following renderers: <code>HeatmapRenderer<\/code>,<code>BlendRenderer<\/code>, <code>TemporalRenderer<\/code>, or <code>ScaleDependentRenderer<\/code>.<\/li>\n<\/ul>\n"}],"authors":[{"ID":6561,"user_firstname":"Kristian","user_lastname":"Ekenes","nickname":"Kristian Ekenes","user_nicename":"kekenes","display_name":"Kristian Ekenes","user_email":"KEkenes@esri.com","user_url":"https:\/\/github.com\/ekenes","user_registered":"2018-03-02 00:18:32","user_description":"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","card_image":false,"wide_image":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Thematic point clustering for data exploration<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Thematic point clustering for data exploration\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2018-05-11T18:12:32+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\"},\"author\":{\"name\":\"Kristian Ekenes\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\"},\"headline\":\"Thematic point clustering for data exploration\",\"datePublished\":\"2017-10-11T08:00:12+00:00\",\"dateModified\":\"2018-05-11T18:12:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\"},\"wordCount\":6,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"Analysis\",\"clustering\",\"data exploration\",\"data visualization\",\"JavaScript\",\"jsapi4\",\"points\",\"renderers\",\"Visualization\"],\"articleSection\":[\"Mapping\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\",\"name\":\"Thematic point clustering for data exploration\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2017-10-11T08:00:12+00:00\",\"dateModified\":\"2018-05-11T18:12:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Thematic point clustering for data exploration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b\",\"name\":\"Kristian Ekenes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png\",\"caption\":\"Kristian Ekenes\"},\"description\":\"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.\",\"sameAs\":[\"https:\/\/github.com\/ekenes\",\"https:\/\/www.linkedin.com\/in\/kristian-ekenes\/\",\"https:\/\/x.com\/kekenes\"],\"gender\":\"male\",\"jobTitle\":\"Principal Product Engineer\",\"worksFor\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Thematic point clustering for data exploration","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration","og_locale":"en_US","og_type":"article","og_title":"Thematic point clustering for data exploration","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2018-05-11T18:12:32+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration"},"author":{"name":"Kristian Ekenes","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b"},"headline":"Thematic point clustering for data exploration","datePublished":"2017-10-11T08:00:12+00:00","dateModified":"2018-05-11T18:12:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration"},"wordCount":6,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["Analysis","clustering","data exploration","data visualization","JavaScript","jsapi4","points","renderers","Visualization"],"articleSection":["Mapping"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration","name":"Thematic point clustering for data exploration","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2017-10-11T08:00:12+00:00","dateModified":"2018-05-11T18:12:32+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/mapping\/mapping\/thematic-point-clustering-for-data-exploration#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Thematic point clustering for data exploration"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/5469f723fbfb78138efbb1da56e6aa9b","name":"Kristian Ekenes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/10\/ekenes-zurich-213x200.png","caption":"Kristian Ekenes"},"description":"Kristian Ekenes is a Principal Product Engineer at Esri specializing in data visualization on the web. He works on the ArcGIS Maps SDK for JavaScript, ArcGIS Arcade, and Map Viewer in ArcGIS Online. Kristian's work focuses on researching and developing new and innovative data visualization capabilities of geospatial data in web maps, Arcade integration in web maps, and applications of generative AI assistants in web maps. Prior to joining Esri, he worked as a GIS Specialist for an environmental consulting company. Kristian has degrees from Brigham Young University and Arizona State University.","sameAs":["https:\/\/github.com\/ekenes","https:\/\/www.linkedin.com\/in\/kristian-ekenes\/","https:\/\/x.com\/kekenes"],"gender":"male","jobTitle":"Principal Product Engineer","worksFor":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes"}]}},"text_date":"October 11, 2017","author_name":"Kristian Ekenes","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/kekenes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/08\/Newsroom-Keyart-Wide-1920-x-1080.jpg","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":24311,"name":"Analysis","slug":"analysis","term_group":0,"term_taxonomy_id":24311,"taxonomy":"post_tag","description":"","parent":0,"count":96,"filter":"raw"},{"term_id":26751,"name":"clustering","slug":"clustering","term_group":0,"term_taxonomy_id":26751,"taxonomy":"post_tag","description":"","parent":0,"count":23,"filter":"raw"},{"term_id":34601,"name":"data exploration","slug":"data-exploration","term_group":0,"term_taxonomy_id":34601,"taxonomy":"post_tag","description":"","parent":0,"count":14,"filter":"raw"},{"term_id":30111,"name":"data visualization","slug":"data-visualization","term_group":0,"term_taxonomy_id":30111,"taxonomy":"post_tag","description":"","parent":0,"count":97,"filter":"raw"},{"term_id":24921,"name":"JavaScript","slug":"javascript","term_group":0,"term_taxonomy_id":24921,"taxonomy":"post_tag","description":"","parent":0,"count":151,"filter":"raw"},{"term_id":27491,"name":"jsapi4","slug":"jsapi4","term_group":0,"term_taxonomy_id":27491,"taxonomy":"post_tag","description":"","parent":0,"count":111,"filter":"raw"},{"term_id":34711,"name":"points","slug":"points","term_group":0,"term_taxonomy_id":34711,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":31291,"name":"renderers","slug":"renderers","term_group":0,"term_taxonomy_id":31291,"taxonomy":"post_tag","description":"","parent":0,"count":9,"filter":"raw"},{"term_id":26521,"name":"Visualization","slug":"visualization","term_group":0,"term_taxonomy_id":26521,"taxonomy":"post_tag","description":"","parent":0,"count":45,"filter":"raw"}],"category_data":[{"term_id":22941,"name":"Mapping","slug":"mapping","term_group":0,"term_taxonomy_id":22941,"taxonomy":"category","description":"","parent":0,"count":2683,"filter":"raw"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":361,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":761,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=js-api-arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/79881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/6561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=79881"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/79881\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=79881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=79881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=79881"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=79881"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=79881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}