

{"id":1136,"date":"2012-05-31T06:04:00","date_gmt":"2012-05-31T11:04:00","guid":{"rendered":"http:\/\/rud.is\/b\/?p=1136"},"modified":"2017-03-27T09:40:30","modified_gmt":"2017-03-27T14:40:30","slug":"slopegraphs-in-python-attention-to-detail","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/","title":{"rendered":"Slopegraphs in Python \u2013 Attention to Detail"},"content":{"rendered":"<p>In the <a href=\"https:\/\/rud.is\/b\/2012\/05\/29\/slopegraphs-in-python-colors-fonts-alignment\/\">previous installment<\/a>, a foundation was laid for &#8220;parameterizing&#8221; fonts, colors and overall slopegraph size. However, a big failing in all this code (up until now) was the reliance on character string length to determine label width. When working with fonts, the font metrics are more important since a lowercase &#8216;l&#8217; will have a smaller font width than an uppercase &#8216;D&#8217;. So, while &#8216;llll&#8217; is &#8220;longer&#8221; than &#8216;DDD&#8217;, it may not be wider (especially in a sans-serif font, but likely in any font):<\/p>\n<p><center><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1141\" data-permalink=\"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/width-example\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png?fit=63%2C55&amp;ssl=1\" data-orig-size=\"63,55\" 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;}\" data-image-title=\"width-example\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png?fit=63%2C55&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png?resize=63%2C55&#038;ssl=1\" alt=\"\" title=\"width-example\" width=\"63\" height=\"55\" class=\"aligncenter size-full wp-image-1141\" \/><\/center><\/p>\n<p>To solve this problem, we need to use a temporary Cairo surface to compute font metrics for each label &#038; value so we know what the maximum width of both for the starting and ending points. It&#8217;s a simple concept &#038; calculation, but very important to ensure everything lines up well.<\/p>\n<pre lang=\"python\" line=\"1\"># find the *real* maximum label width (not just based on number of chars)\r\n\r\nmaxLabelWidth = 0\r\nmaxNumWidth = 0\r\n\r\nfor k in sorted(startKeys):\r\n\ts1 = starts[k]\r\n\txbearing, ybearing, sWidth, sHeight, xadvance, yadvance = (cr.text_extents(s1))\r\n\tif (sWidth > maxLabelWidth) : maxLabelWidth = sWidth\r\n\txbearing, ybearing, startMaxLabelWidth, startMaxLabelHeight, xadvance, yadvance = (cr.text_extents(str(k)))\r\n\tif (startMaxLabelWidth > maxNumWidth) : maxNumWidth = startMaxLabelWidth\r\n\r\nsWidth = maxLabelWidth\r\nstartMaxLabelWidth = maxNumWidth\r\n\r\nmaxWidth = 0\r\nmaxNumWidth = 0\r\n\r\nfor k in sorted(endKeys):\r\n\te1 = ends[k]\r\n\txbearing, ybearing, eWidth, eHeight, xadvance, yadvance = (cr.text_extents(e1))\r\n\tif (eWidth > maxLabelWidth) : maxLabelWidth = eWidth\r\n\txbearing, ybearing, endMaxLabelWidth, endMaxLabelHeight, xadvance, yadvance = (cr.text_extents(str(k)))\r\n\tif (endMaxLabelWidth > maxNumWidth) : maxNumWidth = endMaxLabelWidth\r\n\r\neWidth = maxLabelWidth\r\nendMaxLabelWidth = maxNumWidth<\/pre>\n<p>I tossed some &#8220;anomalies&#8221; into the sample data set to show both how adaptable the vertical scale is as well as demonstrate the label alignments:<\/p>\n<p><center><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1137\" data-permalink=\"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/slopegraph-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?fit=2709%2C6312&amp;ssl=1\" data-orig-size=\"2709,6312\" 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;}\" data-image-title=\"slopegraph\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?fit=439%2C1024&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?resize=439%2C1024&#038;ssl=1\" alt=\"\" title=\"slopegraph\" width=\"439\" height=\"1024\" class=\"aligncenter size-large wp-image-1137\" srcset=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?resize=439%2C1024&amp;ssl=1 439w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?resize=128%2C300&amp;ssl=1 128w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?w=1020&amp;ssl=1 1020w, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/slopegraph2.png?w=1530&amp;ssl=1 1530w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/a><\/center><\/p>\n<p>Updates are in <a href=\"https:\/\/github.com\/hrbrmstr\/slopegraph\">github<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the previous installment, a foundation was laid for &#8220;parameterizing&#8221; fonts, colors and overall slopegraph size. However, a big failing in all this code (up until now) was the reliance on character string length to determine label width. When working with fonts, the font metrics are more important since a lowercase &#8216;l&#8217; will have a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"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":[24,63,640],"tags":[657,658],"class_list":["post-1136","post","type-post","status-publish","format-standard","hentry","category-charts-graphs","category-development","category-python-2","tag-table-chart","tag-tufte"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Slopegraphs in Python \u2013 Attention to Detail - 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\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Slopegraphs in Python \u2013 Attention to Detail - rud.is\" \/>\n<meta property=\"og:description\" content=\"In the previous installment, a foundation was laid for &#8220;parameterizing&#8221; fonts, colors and overall slopegraph size. However, a big failing in all this code (up until now) was the reliance on character string length to determine label width. When working with fonts, the font metrics are more important since a lowercase &#8216;l&#8217; will have a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-31T11:04:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-03-27T14:40:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.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=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Slopegraphs in Python \u2013 Attention to Detail\",\"datePublished\":\"2012-05-31T11:04:00+00:00\",\"dateModified\":\"2017-03-27T14:40:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/\"},\"wordCount\":169,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/width-example.png\",\"keywords\":[\"table-chart\",\"tufte\"],\"articleSection\":[\"Charts &amp; Graphs\",\"Development\",\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/\",\"name\":\"Slopegraphs in Python \u2013 Attention to Detail - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/width-example.png\",\"datePublished\":\"2012-05-31T11:04:00+00:00\",\"dateModified\":\"2017-03-27T14:40:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/width-example.png?fit=63%2C55&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/width-example.png?fit=63%2C55&ssl=1\",\"width\":\"63\",\"height\":\"55\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2012\\\/05\\\/31\\\/slopegraphs-in-python-attention-to-detail\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Slopegraphs in Python \u2013 Attention to Detail\"}]},{\"@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":"Slopegraphs in Python \u2013 Attention to Detail - 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\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/","og_locale":"en_US","og_type":"article","og_title":"Slopegraphs in Python \u2013 Attention to Detail - rud.is","og_description":"In the previous installment, a foundation was laid for &#8220;parameterizing&#8221; fonts, colors and overall slopegraph size. However, a big failing in all this code (up until now) was the reliance on character string length to determine label width. When working with fonts, the font metrics are more important since a lowercase &#8216;l&#8217; will have a [&hellip;]","og_url":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/","og_site_name":"rud.is","article_published_time":"2012-05-31T11:04:00+00:00","article_modified_time":"2017-03-27T14:40:30+00:00","og_image":[{"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png","type":"","width":"","height":""}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Slopegraphs in Python \u2013 Attention to Detail","datePublished":"2012-05-31T11:04:00+00:00","dateModified":"2017-03-27T14:40:30+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/"},"wordCount":169,"commentCount":0,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png","keywords":["table-chart","tufte"],"articleSection":["Charts &amp; Graphs","Development","Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/","url":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/","name":"Slopegraphs in Python \u2013 Attention to Detail - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png","datePublished":"2012-05-31T11:04:00+00:00","dateModified":"2017-03-27T14:40:30+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png?fit=63%2C55&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2012\/05\/width-example.png?fit=63%2C55&ssl=1","width":"63","height":"55"},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2012\/05\/31\/slopegraphs-in-python-attention-to-detail\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Slopegraphs in Python \u2013 Attention to Detail"}]},{"@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":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-ik","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1115,"url":"https:\/\/rud.is\/b\/2012\/05\/29\/slopegraphs-in-python-colors-fonts-alignment\/","url_meta":{"origin":1136,"position":0},"title":"Slopegraphs In Python \u2013\u00a0colors, fonts &#038; alignment","author":"hrbrmstr","date":"2012-05-29","format":false,"excerpt":"On the heels of last evening's release of Slopegraphs in Python post comes some minor tweaks: Complete alignment control of labels & and values Colors (for background, lines, labels & values) \u2014 I picked a random pattern from Adobe's Kuler A font change (to prove width calculations work) \u2026and a\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1229,"url":"https:\/\/rud.is\/b\/2012\/06\/08\/slopegraphs-in-python-experimental-raphael-support\/","url_meta":{"origin":1136,"position":1},"title":"Slopegraphs in Python \u2013 Experimental Rapha\u00ebl Support","author":"hrbrmstr","date":"2012-06-08","format":false,"excerpt":"In preparation for the upcoming 1.0 release and with the hopes of laying a foundation for more interactive slopegraphs, I threw together some rudimentary output support over lunch today for Rapha\u00ebl, which means that all you have to do is generate a new slopegraph with the \"js\" output type and\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1249,"url":"https:\/\/rud.is\/b\/2012\/06\/11\/slopegraphs-in-python-formatting-tweaks\/","url_meta":{"origin":1136,"position":2},"title":"Slopegraphs in Python \u2013 Formatting Tweaks","author":"hrbrmstr","date":"2012-06-11","format":false,"excerpt":"There were enough eye-catching glitches in the experimental javascript support and the ugly large-number display in the spam example post that I felt compelled to make a couple formatting tweaks in the code. I also didn't have time to do \"real\" work on the codebase this weekend. So, along with\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1261,"url":"https:\/\/rud.is\/b\/2012\/06\/12\/slopegraphs-in-python-gratuitous-raphael-animations\/","url_meta":{"origin":1136,"position":3},"title":"Slopegraphs in Python \u2013 Gratuitous Rapha\u00ebl Animations","author":"hrbrmstr","date":"2012-06-12","format":false,"excerpt":"UPDATE: It seems my use of <script async> optimization for Rapha\u00ebl busted the inline slopegraph generation. Will work on tweaking the example posts to wait for Rapha\u00ebl to load when I get some time. So, I had to alter this to start after a user interaction. It loaded fine as\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2830,"url":"https:\/\/rud.is\/b\/2013\/12\/04\/newest-font-obsession-lato\/","url_meta":{"origin":1136,"position":4},"title":"Newest Font Obsession: Lato","author":"hrbrmstr","date":"2013-12-04","format":false,"excerpt":"I tend to obsess over fonts and the latest obsession is Lato. It was created over three years ago by \u0141ukasz Dziedzic but I only discovered it recently when searching for something to use with my Live Maine Power Outages visualization. The Lato main site provides desktop fonts and web\u2026","rel":"","context":"In &quot;fonts&quot;","block_context":{"text":"fonts","link":"https:\/\/rud.is\/b\/category\/fonts\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1089,"url":"https:\/\/rud.is\/b\/2012\/05\/28\/slopegraphs-in-python\/","url_meta":{"origin":1136,"position":5},"title":"Slopegraphs in Python","author":"hrbrmstr","date":"2012-05-28","format":false,"excerpt":"(NOTE: You can keep up with progress best at github, but can always search on \"slopegraph\" here or just hit the tag page: \"slopegraph\" regularly) I've been a bit obsessed with slopegraphs (a.k.a \"Tufte table-chart\") of late and very dissatisfied with the lack of tools to make this particular visualization\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/1136","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=1136"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/1136\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=1136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=1136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=1136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}