

{"id":4154,"date":"2016-03-18T13:28:09","date_gmt":"2016-03-18T18:28:09","guid":{"rendered":"http:\/\/rud.is\/b\/?p=4154"},"modified":"2018-08-06T05:39:36","modified_gmt":"2018-08-06T10:39:36","slug":"stacking-the-deck-against-treemaps","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/","title":{"rendered":"Stacking the deck against treemaps"},"content":{"rendered":"<p>So, I (unapologetically) did this to @Highcharts last week:<\/p>\n<blockquote class=\"twitter-tweet\" data-lang=\"en\">\n<p lang=\"en\" dir=\"ltr\"><a href=\"https:\/\/mobile.twitter.com\/hrbrmstr\">@hrbrmstr<\/a> Your loss of words inspired this post!! <a href=\"https:\/\/t.co\/3KO0BP0k0u\">https:\/\/t.co\/3KO0BP0k0u<\/a> <a href=\"https:\/\/mobile.twitter.com\/hadleywickham\">@hadleywickham<\/a> <a href=\"https:\/\/mobile.twitter.com\/ma_salmon\">@ma_salmon<\/a> <a href=\"https:\/\/mobile.twitter.com\/tdmv\">@tdmv<\/a> <a href=\"https:\/\/mobile.twitter.com\/bearloga\">@bearloga<\/a> <a href=\"https:\/\/mobile.twitter.com\/rushworth_a\">@rushworth_a<\/a> <a href=\"https:\/\/mobile.twitter.com\/awhstin\">@awhstin<\/a><\/p>\n<p>\u2014 Highcharts (@Highcharts) <a href=\"https:\/\/mobile.twitter.com\/Highcharts\/status\/710833796757774337\">March 18, 2016<\/a><\/p><\/blockquote>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>They did an awesome makeover (it&#8217;s interactive if you follow the link):<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/chart.png?ssl=1\" rel=\"attachment wp-att-4156\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"340\" data-attachment-id=\"4156\" data-permalink=\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/chart\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/chart.png?fit=1200%2C800&amp;ssl=1\" data-orig-size=\"1200,800\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"chart\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/chart.png?fit=300%2C200&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/chart.png?fit=510%2C340&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/chart.png?resize=510%2C340&#038;ssl=1\" alt=\"chart\" class=\"aligncenter size-full wp-image-4156\" \/><\/a><\/p>\n<p>And, I&#8217;m not kidding, it&#8217;s actually a really good treemap. Not <em>too many<\/em> hierarchies or discrete categories. But, it&#8217;s still hard for humans to compare things without the aid of the interaction (which is totally fair, the Highcharts folks do interaction well). I always try to find an alternative to treemaps, usually through trying to figure out the story to tell. I think there&#8217;s at least one story in the Highcharts data that we can uncover with a different visualization. Ironically, the visualization I&#8217;ve chosen is a stacked bar chart (I don&#8217;t generally like them, either). I&#8217;ll frame the story and then dissect the code.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?ssl=1\" rel=\"attachment wp-att-4158\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"296\" data-attachment-id=\"4158\" data-permalink=\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/rstudioscreensnapz021\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&amp;ssl=1\" data-orig-size=\"1422,824\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"RStudioScreenSnapz021\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=300%2C174&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=510%2C296&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?resize=510%2C296&#038;ssl=1\" alt=\"RStudioScreenSnapz021\" class=\"aligncenter size-full wp-image-4158\"\/><\/a><\/p>\n<blockquote><p>\n  <em>We looked at the number of frameworks being used with Highcharts across web-oriented programming languages. Surprisingly, four of the six top languages\u2014Java, PHP, Python &#038; dotNet\u2014show Highcharts being used <em>without<\/em> an associated framework, which highlights the flexible nature of Highcharts. There seems to be\u2014unsurprisingly\u2014only one player in town when it comes to Ruby: Ruby on Rails, and the high prevalence of AngularJS tracks with Angular&#8217;s apparent <a href=\"https:\/\/stats.js.org\/\">dominance in javascript land<\/a>. INSERT_MARKETING_LANGAUGE_HERE<\/em>\n<\/p><\/blockquote>\n<p>In real life, I&#8217;d add a <a href=\"https:\/\/datatables.net\/\">DataTables<\/a> interactive table with this to let folks explore a bit more.<\/p>\n<h3>Making this in R &#038; ggplot2<\/h3>\n<p>Highcharts used a Google Sheet to hold the data for their treemap makeover. That means we can have some fun with it in R. So, the two main story points are:<\/p>\n<ol>\n<li>show how the languages, and in-language frameworks rank against each other<\/li>\n<li>show the dominant framework in each language<\/li>\n<\/ol>\n<p>As demonstrated, I&#8217;ve chosen to use stacked bar charts since there only six languages and it turns out there is a dominant category for each.<\/p>\n<p>A design criteria I made was to use the main or alternate color for each language and use a gradient to segment each in-language framework. I chose the yellow alternate color for Python since <strike>it&#8217;s such cowardly language<\/strike> there was enough blue in the chart already. Java &amp; Ruby are separated enough that their slightly different reds aren&#8217;t too bad\/confusing (and neither language left me with much of an alternative). I picked a green from the Mozilla palette for JavaScript since they seem to dominate any Google search for JavaScript info.<\/p>\n<p>Let&#8217;s get libraries out of the way. I&#8217;m using my personal theme since I really don&#8217;t feel like typing everything out. If you need me to, drop a note and I&#8217;ll see what I can do.<\/p>\n<pre><code class=\"language-r\">library(googlesheets) # get the data\nlibrary(dplyr)        # reshape the data\nlibrary(ggplot2)      # plot\nlibrary(hrbrmisc)     # theme\nlibrary(scales)       # plot helpers<\/code><\/pre>\n<p>First, we need the data, and that&#8217;s where @jennybryan&#8217;s excellent <code>googlesheets<\/code> package comes into play:<\/p>\n<pre><code class=\"language-r\">sheet <- gs_key(\"1wYm5waQmiYKGhtdofvXDS8SHdh72Mwcnygvf3bvFfoU\")\n\nlangs <- gs_read(sheet)\nlangs <- langs[-(1:6), 2:4]<\/code><\/pre>\n<p>We need to be able to order the programming languages by # of frameworks and we need the colors defined:<\/p>\n<pre><code class=\"language-r\">tops <- count(langs, parent, wt=value)\n\nparent_cols <- c(Java=\"#960000\", PHP=\"#8892bf\", Python=\"#ffdc51\", \n                 JavaScript=\"#70ab2d\", dotNet=\"#68217a\", Ruby=\"#af1401\")<\/code><\/pre>\n<p>To get bars and stacked segments sorted the right way, we need to add a helper column and arrange the overall data frame:<\/p>\n<pre><code class=\"language-r\">\nlangs <- arrange(ungroup(mutate(group_by(langs, parent), rank=rank(value))), -rank)<\/code><\/pre>\n<p>Next, we need to assign colors per language and in-language framework, I do this by computing an ordered alpha value for each framework dependent on the number of frameworks in the language:<\/p>\n<pre><code class=\"language-r\">langs <- mutate(group_by(langs, parent), \n                color=alpha(parent_cols[parent[1]], seq(1, 0.3, length.out=n())))><\/code><\/pre>\n<p>Finally we need the actual languages in factor order for <code>ggplot<\/code>:<\/p>\n<pre><code class=\"language-r\">\nlangs$parent <- factor(langs$parent, levels=arrange(tops, n)$parent)<\/code><\/pre>\n<p>We also need the dominant frameworks separated out so we can annotate them. Extra marks for ensuring they're readable (black vs white depending on the base color):<\/p>\n<pre><code class=\"language-r\">top_f <- slice(group_by(langs, parent), 1)\ntop_f$color <- c(\"white\", \"white\", \"#2b2b2b\", \"#2b2b2b\", \"white\", \"white\")<\/code><\/pre>\n<p>With the data in the right format, the actual <code>ggplot<\/code> code isn't too cumbersome:<\/p>\n<pre><code class=\"language-r\">gg <- ggplot()\n\n# stack the bars. the bars themselvs will be ordered by the language factor and our\n# computed rank will stack them in the right order. we'll use an identify fill for\n# the mapped fill aesthetic\n\ngg <- gg + geom_bar(data=langs, stat=\"identity\", \n                    aes(x=parent, y=value, fill=color, order=rank),\n                    color=\"white\", size=0.15, width=0.65)\n\n# text labels at the end of the bar means no need for any extra chart junk\n\ngg <- gg + geom_text(data=tops, family=\"NoyhSlim-Medium\",\n                     aes(x=parent, y=n, label=n), \n                     hjust=-0.2, size=3)\n\n# here's how we label the dominant framework\n\ngg <- gg + geom_text(data=top_f, family=\"NoyhSlim-Medium\",\n                     aes(x=parent, y=value\/2, label=id, color=color), \n                     hjust=0.5, size=3)\n\n# we'll control our own panel breathing room, thanks anyway, ggplot2\n\ngg <- gg + scale_x_discrete(expand=c(0,0))\ngg <- gg + scale_y_continuous(expand=c(0,0), limits=c(0, 900))\n\n# these tell ggplot to use the color we've specified vs map it to a scale\n\ngg <- gg + scale_color_identity()\ngg <- gg + scale_fill_identity()\n\n# the rest doesn't need 'splainin\n\ngg <- gg + coord_flip()\ngg <- gg + labs(x=NULL, y=NULL,\n                title=\"Popular web frameworks using Highcharts\",\n                subtitle=\"Total usage by language, including the most popular framework in-language\",\n                caption=\"Data graciously provided by Highcharts - http:\/\/jsfiddle.net\/vidarbrekke\/n6pd4jfo\/\")\ngg <- gg + theme_hrbrmstr(grid=FALSE, axis=\"y\")\ngg <- gg + theme(legend.position=\"none\")\ngg <- gg + theme(axis.text.x=element_blank())\ngg<\/code><\/pre>\n<p>If I wanted to kill more time, I'd've used the language logo vs the name in the axis.<\/p>\n<h3>Fin<\/h3>\n<p>What story\/stories can you glean from the data and how would you tell them? Drop a note in the comments with your creation(s)!<\/p>\n<p>Complete, contiguous code is in <a href=\"https:\/\/gist.github.com\/hrbrmstr\/8094644863ba7ce3959c\">this gist<\/a>.<\/p>\n<p>Note that stacked bars aren't always a replacement for treemaps and that treemaps do have valid uses. The important part is to choose the visualization that best supports the story you want to tell.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So, I (unapologetically) did this to @Highcharts last week: @hrbrmstr Your loss of words inspired this post!! https:\/\/t.co\/3KO0BP0k0u @hadleywickham @ma_salmon @tdmv @bearloga @rushworth_a @awhstin \u2014 Highcharts (@Highcharts) March 18, 2016 They did an awesome makeover (it&#8217;s interactive if you follow the link): And, I&#8217;m not kidding, it&#8217;s actually a really good treemap. Not too many [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4158,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[678,673,674,753,91],"tags":[810],"class_list":["post-4154","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-visualization","category-datavis-2","category-dataviz","category-ggplot","category-r","tag-post"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stacking the deck against treemaps - rud.is<\/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:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stacking the deck against treemaps - rud.is\" \/>\n<meta property=\"og:description\" content=\"So, I (unapologetically) did this to @Highcharts last week: @hrbrmstr Your loss of words inspired this post!! https:\/\/t.co\/3KO0BP0k0u @hadleywickham @ma_salmon @tdmv @bearloga @rushworth_a @awhstin \u2014 Highcharts (@Highcharts) March 18, 2016 They did an awesome makeover (it&#8217;s interactive if you follow the link): And, I&#8217;m not kidding, it&#8217;s actually a really good treemap. Not too many [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-18T18:28:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-06T10:39:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1422\" \/>\n\t<meta property=\"og:image:height\" content=\"824\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Stacking the deck against treemaps\",\"datePublished\":\"2016-03-18T18:28:09+00:00\",\"dateModified\":\"2018-08-06T10:39:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\"},\"wordCount\":706,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1\",\"keywords\":[\"post\"],\"articleSection\":[\"Data Visualization\",\"DataVis\",\"DataViz\",\"ggplot\",\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\",\"url\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\",\"name\":\"Stacking the deck against treemaps - rud.is\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1\",\"datePublished\":\"2016-03-18T18:28:09+00:00\",\"dateModified\":\"2018-08-06T10:39:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1\",\"width\":1422,\"height\":824},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/rud.is\/b\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stacking the deck against treemaps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/rud.is\/b\/#website\",\"url\":\"https:\/\/rud.is\/b\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/rud.is\/b\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\/\/rud.is\"],\"url\":\"https:\/\/rud.is\/b\/author\/hrbrmstr\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stacking the deck against treemaps - rud.is","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:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/","og_locale":"en_US","og_type":"article","og_title":"Stacking the deck against treemaps - rud.is","og_description":"So, I (unapologetically) did this to @Highcharts last week: @hrbrmstr Your loss of words inspired this post!! https:\/\/t.co\/3KO0BP0k0u @hadleywickham @ma_salmon @tdmv @bearloga @rushworth_a @awhstin \u2014 Highcharts (@Highcharts) March 18, 2016 They did an awesome makeover (it&#8217;s interactive if you follow the link): And, I&#8217;m not kidding, it&#8217;s actually a really good treemap. Not too many [&hellip;]","og_url":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/","og_site_name":"rud.is","article_published_time":"2016-03-18T18:28:09+00:00","article_modified_time":"2018-08-06T10:39:36+00:00","og_image":[{"width":1422,"height":824,"url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1","type":"image\/png"}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Stacking the deck against treemaps","datePublished":"2016-03-18T18:28:09+00:00","dateModified":"2018-08-06T10:39:36+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/"},"wordCount":706,"commentCount":2,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1","keywords":["post"],"articleSection":["Data Visualization","DataVis","DataViz","ggplot","R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/","url":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/","name":"Stacking the deck against treemaps - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1","datePublished":"2016-03-18T18:28:09+00:00","dateModified":"2018-08-06T10:39:36+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1","width":1422,"height":824},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2016\/03\/18\/stacking-the-deck-against-treemaps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Stacking the deck against treemaps"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/RStudioScreenSnapz021.png?fit=1422%2C824&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p23idr-150","jetpack_likes_enabled":true,"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/4154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=4154"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/4154\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media\/4158"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=4154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=4154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=4154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}