{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"blog_tag","url":"https://ejfox.com/blog/tag/dataviz","json_url":"https://ejfox.com/blog/tag/dataviz.json","generator":"ejfox.com/json-twin@1","data":{"tag":"dataviz","count":20,"posts":[{"slug":"2019/how-i-prototype-apps-and-dataviz-quickly-in-2019","title":"How I prototype apps and dataviz quickly","date":"2019-03-20T01:25:22.000Z","type":"words","modified":"2024-09-23T16:13:36.000Z","tags":["vue","dataviz","d3","javascript","webdesign"],"toc":[{"text":"How I prototype apps and dataviz quickly","slug":"how-i-prototype-apps-and-dataviz-quickly","level":"h2","children":[{"text":"Pulling in data","slug":"pulling-in-data","level":"h3","children":[]},{"text":"Combining Vue and D3 for dataviz","slug":"combining-vue-and-d3-for-dataviz","level":"h3","children":[]},{"text":"Database and user authentication","slug":"database-and-user-authentication","level":"h3","children":[]},{"text":"Deploying","slug":"deploying","level":"h3","children":[]}]}],"metadata":{"type":"words","date":"2019-03-20T01:25:22.000Z","modified":"2024-09-23T16:13:36.000Z","tags":["vue","dataviz","d3","javascript","webdesign"],"words":930,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":15,"codeBlocks":3,"headers":{"h2":1},"toc":[{"text":"How I prototype apps and dataviz quickly","slug":"how-i-prototype-apps-and-dataviz-quickly","level":"h2","children":[{"text":"Pulling in data","slug":"pulling-in-data","level":"h3","children":[]},{"text":"Combining Vue and D3 for dataviz","slug":"combining-vue-and-d3-for-dataviz","level":"h3","children":[]},{"text":"Database and user authentication","slug":"database-and-user-authentication","level":"h3","children":[]},{"text":"Deploying","slug":"deploying","level":"h3","children":[]}]}],"slug":"2019/how-i-prototype-apps-and-dataviz-quickly-in-2019"}},{"slug":"2020/coding-livestreams","title":"A summer of live streamed coding","date":"2020-10-08T08:00:52.000Z","type":"words","dek":"In which the skill of broadcasting yourself writing code to the entire internet is explored","modified":"2024-09-23T16:12:59.000Z","tags":["livestream","coding","dataviz","inspiration","education","visualization"],"toc":[{"text":"A summer of live streamed coding","slug":"a-summer-of-live-streamed-coding","level":"h2","children":[{"text":"The cooking show metaphor","slug":"the-cooking-show-metaphor","level":"h3","children":[]},{"text":"Working in the open","slug":"working-in-the-open","level":"h3","children":[]},{"text":"Livestream experiments","slug":"livestream-experiments","level":"h3","children":[]},{"text":"Building the habit","slug":"building-the-habit","level":"h3","children":[]},{"text":"Surprisingly productive","slug":"surprisingly-productive","level":"h3","children":[]}]}],"metadata":{"date":"2020-10-08T08:00:52.000Z","type":"words","dek":"In which the skill of broadcasting yourself writing code to the entire internet is explored","tags":["livestream","coding","dataviz","inspiration","education","visualization"],"modified":"2024-09-23T16:12:59.000Z","words":1230,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":11,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"A summer of live streamed coding","slug":"a-summer-of-live-streamed-coding","level":"h2","children":[{"text":"The cooking show metaphor","slug":"the-cooking-show-metaphor","level":"h3","children":[]},{"text":"Working in the open","slug":"working-in-the-open","level":"h3","children":[]},{"text":"Livestream experiments","slug":"livestream-experiments","level":"h3","children":[]},{"text":"Building the habit","slug":"building-the-habit","level":"h3","children":[]},{"text":"Surprisingly productive","slug":"surprisingly-productive","level":"h3","children":[]}]}],"slug":"2020/coding-livestreams"}},{"slug":"2021/lack-of-data","title":"The Lack of Data","date":"2021-05-17T08:00:10.000Z","type":"words","dek":"An exploration of what we choose to track, and what we don't – and what that means if we want to make the world a better place","modified":"2024-09-27T17:44:44.000Z","tags":["data","datajournalism","dataviz","lackofdata","police","america"],"toc":[{"text":"The Lack of Data","slug":"the-lack-of-data","level":"h2","children":[]}],"metadata":{"date":"2021-05-17T08:00:10.000Z","type":"words","dek":"An exploration of what we choose to track, and what we don't – and what that means if we want to make the world a better place","modified":"2024-09-27T17:44:44.000Z","tags":["data","datajournalism","dataviz","lackofdata","police","america"],"words":600,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":2,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"The Lack of Data","slug":"the-lack-of-data","level":"h2","children":[]}],"slug":"2021/lack-of-data"}},{"slug":"2023/livestreaming","title":"Livestreaming","date":"2023-01-03T18:21:22.000Z","type":"post","dek":"In which we make a list of the times I have livestreamed","modified":"2024-09-20T04:23:53.000Z","tags":["livestream","dataviz","vue","coding","climatechange","youtube"],"toc":[{"text":"Livestreaming","slug":"livestreaming","level":"h2","children":[{"text":"Past Livestreams","slug":"past-livestreams","level":"h3","children":[]}]}],"metadata":{"dek":"In which we make a list of the times I have livestreamed","date":"2023-01-03T18:21:22.000Z","modified":"2024-09-20T04:23:53.000Z","tags":["livestream","dataviz","vue","coding","climatechange","youtube"],"words":236,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":13,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"Livestreaming","slug":"livestreaming","level":"h2","children":[{"text":"Past Livestreams","slug":"past-livestreams","level":"h3","children":[]}]}],"type":"post","slug":"2023/livestreaming"}},{"slug":"2024/my-modern-scrapbook","title":"Building myself a scrapbook","date":"2024-09-20T04:22:35.000Z","type":"post","dek":"In which we attempt to craft some treasure from the debris of a life lived on the internet","modified":"2024-11-05T16:50:13.000Z","tags":["inspiration","dataviz","design","howto","politics"],"toc":[{"text":"Building myself a scrapbook","slug":"building-myself-a-scrapbook","level":"h2","children":[]},{"text":"The groundwork for customized interfaces","slug":"the-groundwork-for-customized-interfaces","level":"h2","children":[]},{"text":"Retrieving my data","slug":"retrieving-my-data","level":"h2","children":[]},{"text":"Enhancing my data","slug":"enhancing-my-data","level":"h2","children":[]},{"text":"Exploring my data","slug":"exploring-my-data","level":"h2","children":[]},{"text":"Quickly recalling my research","slug":"quickly-recalling-my-research","level":"h2","children":[]},{"text":"Sharing with others","slug":"sharing-with-others","level":"h2","children":[{"text":"Public bibliography","slug":"public-bibliography","level":"h3","children":[]}]},{"text":"Take control of your own data, make your own systems","slug":"take-control-of-your-own-data-make-your-own-systems","level":"h2","children":[]}],"metadata":{"dek":"In which we attempt to craft some treasure from the debris of a life lived on the internet","date":"2024-09-20T04:22:35.000Z","modified":"2024-11-05T16:50:13.000Z","tags":["inspiration","dataviz","design","howto","politics"],"words":2130,"images":12,"imageDetails":{"total":12,"cloudinary":12,"withDimensions":0},"links":32,"codeBlocks":1,"headers":{"h2":8},"toc":[{"text":"Building myself a scrapbook","slug":"building-myself-a-scrapbook","level":"h2","children":[]},{"text":"The groundwork for customized interfaces","slug":"the-groundwork-for-customized-interfaces","level":"h2","children":[]},{"text":"Retrieving my data","slug":"retrieving-my-data","level":"h2","children":[]},{"text":"Enhancing my data","slug":"enhancing-my-data","level":"h2","children":[]},{"text":"Exploring my data","slug":"exploring-my-data","level":"h2","children":[]},{"text":"Quickly recalling my research","slug":"quickly-recalling-my-research","level":"h2","children":[]},{"text":"Sharing with others","slug":"sharing-with-others","level":"h2","children":[{"text":"Public bibliography","slug":"public-bibliography","level":"h3","children":[]}]},{"text":"Take control of your own data, make your own systems","slug":"take-control-of-your-own-data-make-your-own-systems","level":"h2","children":[]}],"type":"post","slug":"2024/my-modern-scrapbook"}},{"slug":"2025/mcp-meta-mapping","title":"Mapping Novel Territories: Untangling MCP Servers","date":"2025-03-25T04:12:41.000Z","type":"post","dek":"In which we the author gets his bearings by doing one of the things he knows best; making a map","modified":"2025-03-27T20:12:50.000Z","tags":["embeddings","cartography","dataviz"],"toc":[{"text":"Mapping Novel Territories: Untangling MCP Servers","slug":"mapping-novel-territories-untangling-mcp-servers","level":"h2","children":[]}],"metadata":{"dek":"In which we the author gets his bearings by doing one of the things he knows best; making a map","tags":["embeddings","cartography","dataviz"],"date":"2025-03-25T04:12:41.000Z","modified":"2025-03-27T20:12:50.000Z","words":762,"images":8,"imageDetails":{"total":8,"cloudinary":8,"withDimensions":0},"links":0,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"Mapping Novel Territories: Untangling MCP Servers","slug":"mapping-novel-territories-untangling-mcp-servers","level":"h2","children":[]}],"type":"post","slug":"2025/mcp-meta-mapping"}},{"slug":"2025/paramilitary-telegram-leaks-001","title":"Processing Telegram Leaks for Fast Web Visualization","date":"2025-03-09T17:49:01.000Z","type":"post","dek":"In which I describe my workflow for transforming a Telegram database dump into a web-friendly format for analysis and visualization","modified":"2025-03-16T01:25:05.000Z","tags":["data","dataviz","journalism","politics"],"toc":[{"text":"Paramilitary Telegram Leaks: From Dump To Data","slug":"paramilitary-telegram-leaks-from-dump-to-data","level":"h2","children":[]},{"text":"From SQLite to Parquet: Processing Telegram Leaks for Fast Web Visualization","slug":"from-sqlite-to-parquet-processing-telegram-leaks-for-fast-web-visualization","level":"h2","children":[{"text":"The Challenge","slug":"the-challenge","level":"h3","children":[]},{"text":"The Workflow","slug":"the-workflow","level":"h3","children":[]},{"text":"The Frontend","slug":"the-frontend","level":"h3","children":[]},{"text":"Data Exploration Examples","slug":"data-exploration-examples","level":"h3","children":[]},{"text":"Building Custom Visualizations","slug":"building-custom-visualizations","level":"h3","children":[]}]}],"metadata":{"date":"2025-03-09T17:49:01.000Z","modified":"2025-03-16T01:25:05.000Z","title":"Processing Telegram Leaks for Fast Web Visualization","dek":"In which I describe my workflow for transforming a Telegram database dump into a web-friendly format for analysis and visualization","tags":["data","dataviz","journalism","politics"],"words":724,"images":6,"imageDetails":{"total":6,"cloudinary":6,"withDimensions":0},"links":15,"codeBlocks":5,"headers":{"h2":2},"toc":[{"text":"Paramilitary Telegram Leaks: From Dump To Data","slug":"paramilitary-telegram-leaks-from-dump-to-data","level":"h2","children":[]},{"text":"From SQLite to Parquet: Processing Telegram Leaks for Fast Web Visualization","slug":"from-sqlite-to-parquet-processing-telegram-leaks-for-fast-web-visualization","level":"h2","children":[{"text":"The Challenge","slug":"the-challenge","level":"h3","children":[]},{"text":"The Workflow","slug":"the-workflow","level":"h3","children":[]},{"text":"The Frontend","slug":"the-frontend","level":"h3","children":[]},{"text":"Data Exploration Examples","slug":"data-exploration-examples","level":"h3","children":[]},{"text":"Building Custom Visualizations","slug":"building-custom-visualizations","level":"h3","children":[]}]}],"type":"post","slug":"2025/paramilitary-telegram-leaks-001"}},{"slug":"projects/coachartie-memory","title":"Coach Artie — Memory Analysis","date":"2026-02-01T05:00:00.000Z","type":"post","tags":["dataviz","data","ai","embeddings"],"toc":[],"metadata":{"title":"Coach Artie — Memory Analysis","date":"2026-02-01T05:00:00.000Z","category":"Dataviz","featured":false,"tech":["Python","t-SNE","HDBSCAN","Embeddings","Data Visualization"],"state":"doing","ai-involvement":"ai-collaborative","context":"collaborative","tags":["dataviz","data","ai","embeddings"],"words":178,"images":6,"imageDetails":{"total":6,"cloudinary":6,"withDimensions":0},"links":0,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/coachartie-memory"}},{"slug":"projects/connectology","title":"Connectology","date":"2026-03-01T00:00:00.000Z","type":"post","tags":["dataviz","network","web"],"toc":[],"metadata":{"title":"Connectology","date":"2026-03-01T00:00:00.000Z","category":"Dataviz","featured":false,"url":"https://connectology.room302.studio/","tech":["Nuxt 3","Vue 3","D3","graphology","SQLite","Clerk"],"state":"deployed","ai-involvement":"ai-assisted","context":"collaborative","tags":["dataviz","network","web"],"about":"[[project-notes/connectology]]","words":334,"images":3,"imageDetails":{"total":3,"cloudinary":3,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/connectology"}},{"slug":"projects/covidcast","title":"COVIDcast","date":"2020-04-24T04:00:00.000Z","type":"post","modified":"2025-08-26T19:53:05.000Z","tags":["covid","dataviz","javascript","health"],"toc":[],"metadata":{"title":"COVIDcast","date":"2020-04-24T04:00:00.000Z","category":"Journalism","featured":false,"modified":"2025-08-26T19:53:05.000Z","url":"https://campustechnology.com/articles/2020/04/24/carnegie-mellon-maps-offer-more-data-for-covid-19-forecasting.aspx","tech":["Data Visualization","JavaScript","COVID-19 Data","Public Health"],"state":"deployed","ai-involvement":"human-only","context":"client","tags":["covid","dataviz","javascript","health"],"words":186,"images":3,"imageDetails":{"total":3,"cloudinary":3,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/covidcast"}},{"slug":"projects/gem-viz","title":"Global Energy Ownership Tracker","date":"2026-05-01T04:00:00.000Z","type":"post","tags":["dataviz","network","energy","climate"],"toc":[],"metadata":{"title":"Global Energy Ownership Tracker","date":"2026-05-01T04:00:00.000Z","category":"Dataviz","featured":true,"tech":["D3.js","Network Analysis","Data Visualization"],"state":"deployed","ai-involvement":"ai-assisted","context":"client","url":"https://globalenergymonitor.org/projects/global-energy-ownership-tracker","tags":["dataviz","network","energy","climate"],"words":354,"images":8,"imageDetails":{"total":8,"cloudinary":6,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/gem-viz"}},{"slug":"projects/long-lead","title":"Long Lead","date":"2021-11-18T05:00:00.000Z","type":"post","draft":false,"tags":["data","dataviz","journalism","investigations"],"toc":[{"text":"The Depths She'll Reach","slug":"the-depths-shell-reach","level":"h2","children":[]},{"text":"Querdenken: COVID Misinformation or Freedom Movement?","slug":"querdenken-covid-misinformation-or-freedom-movement","level":"h2","children":[]}],"metadata":{"title":"Long Lead","date":"2021-11-18T05:00:00.000Z","category":"Journalism","featured":false,"draft":false,"client":"Long Lead","tech":["Scrollytelling","Data Visualization","Network Analysis"],"state":"deployed","ai-involvement":"human-only","context":"client","tags":["data","dataviz","journalism","investigations"],"words":144,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":3,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"The Depths She'll Reach","slug":"the-depths-shell-reach","level":"h2","children":[]},{"text":"Querdenken: COVID Misinformation or Freedom Movement?","slug":"querdenken-covid-misinformation-or-freedom-movement","level":"h2","children":[]}],"type":"post","slug":"projects/long-lead"}},{"slug":"projects/margin-maps","title":"The Margin","date":"2022-09-21T04:00:00.000Z","type":"post","draft":false,"tags":["maps","dataviz","journalism","interactive"],"toc":[{"text":"We Glow in the Dark","slug":"we-glow-in-the-dark","level":"h2","children":[]},{"text":"Opening the Gateway","slug":"opening-the-gateway","level":"h2","children":[]}],"metadata":{"title":"The Margin","date":"2022-09-21T04:00:00.000Z","category":"Journalism","featured":false,"draft":false,"client":"The Margin","tech":["Mapping","Satellite Imagery","Scrollytelling","Data Visualization"],"state":"deployed","ai-involvement":"human-only","context":"client","tags":["maps","dataviz","journalism","interactive"],"words":143,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":4,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"We Glow in the Dark","slug":"we-glow-in-the-dark","level":"h2","children":[]},{"text":"Opening the Gateway","slug":"opening-the-gateway","level":"h2","children":[]}],"type":"post","slug":"projects/margin-maps"}},{"slug":"projects/motorcycle-viz","title":"Motorcycle Meta-Visualizations","date":"2026-05-01T04:00:00.000Z","type":"post","tags":["motorcycle","dataviz","generative","art","video"],"toc":[{"text":"Mapping the rides","slug":"mapping-the-rides","level":"h2","children":[]}],"metadata":{"title":"Motorcycle Meta-Visualizations","date":"2026-05-01T04:00:00.000Z","featured":true,"category":"Art","url":"https://github.com/ejfox/motorcycle-viz","tech":["FFmpeg","Python","Generative Art","Data Visualization"],"state":"doing","ai-involvement":"ai-assisted","tags":["motorcycle","dataviz","generative","art","video"],"words":525,"images":11,"imageDetails":{"total":11,"cloudinary":11,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"Mapping the rides","slug":"mapping-the-rides","level":"h2","children":[]}],"type":"post","slug":"projects/motorcycle-viz"}},{"slug":"projects/nbc-big-board","title":"NBC News Big Board","date":"2016-11-08T05:00:00.000Z","type":"post","modified":"2025-08-13T16:24:29.000Z","tags":["d3","dataviz","javascript","elections"],"toc":[],"metadata":{"title":"NBC News Big Board","date":"2016-11-08T05:00:00.000Z","client":"NBC News","category":"Journalism","modified":"2025-08-13T16:24:29.000Z","tech":["D3.js","JavaScript","Touch Interface","Election Data"],"featured":true,"state":"deployed","ai-involvement":"human-only","context":"client","tags":["d3","dataviz","javascript","elections"],"words":394,"images":4,"imageDetails":{"total":4,"cloudinary":4,"withDimensions":0},"links":3,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/nbc-big-board"}},{"slug":"projects/nbcnews-specials","title":"NBC News Specials","date":"2016-12-14T20:01:50.000Z","type":"post","modified":"2025-08-13T16:01:12.000Z","tags":["dataviz","journalism","webdesign","elections"],"toc":[{"text":"Journey of a Bullet (2017)","slug":"journey-of-a-bullet-2017","level":"h2","children":[]},{"text":"Post Bail (2017)","slug":"post-bail-2017","level":"h2","children":[]},{"text":"Does America Need Another Prison? (2018)","slug":"does-america-need-another-prison-2018","level":"h2","children":[]},{"text":"How Trump Won (2016)","slug":"how-trump-won-2016","level":"h2","children":[]},{"text":"And more","slug":"and-more","level":"h2","children":[]}],"metadata":{"title":"NBC News Specials","date":"2016-12-14T20:01:50.000Z","client":"NBC News","category":"Journalism","featured":false,"modified":"2025-08-13T16:01:12.000Z","url":"https://nbcnews.com/specials","state":"deployed","ai-involvement":"human-only","tech":["JavaScript","D3","Longform Design"],"context":"client","tags":["dataviz","journalism","webdesign","elections"],"words":255,"images":4,"imageDetails":{"total":4,"cloudinary":4,"withDimensions":0},"links":7,"codeBlocks":0,"headers":{"h2":5},"toc":[{"text":"Journey of a Bullet (2017)","slug":"journey-of-a-bullet-2017","level":"h2","children":[]},{"text":"Post Bail (2017)","slug":"post-bail-2017","level":"h2","children":[]},{"text":"Does America Need Another Prison? (2018)","slug":"does-america-need-another-prison-2018","level":"h2","children":[]},{"text":"How Trump Won (2016)","slug":"how-trump-won-2016","level":"h2","children":[]},{"text":"And more","slug":"and-more","level":"h2","children":[]}],"type":"post","slug":"projects/nbcnews-specials"}},{"slug":"projects/newswell","title":"Newswell Studio","date":"2025-10-01T00:00:00.000Z","type":"post","draft":false,"tags":["tools","journalism","dataviz"],"toc":[],"metadata":{"title":"Newswell Studio","date":"2025-10-01T00:00:00.000Z","category":"Tools","featured":false,"draft":false,"tech":["Nuxt 4","Vue","WordPress","PHP","GPT-4"],"state":"deployed","ai-involvement":"ai-assisted","tags":["tools","journalism","dataviz"],"words":130,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":0,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/newswell"}},{"slug":"projects/pixel-canvas","title":"Pixel Canvas","date":"2026-05-27T04:00:00.000Z","type":"post","draft":false,"tags":["hardware","device","dataviz","quantified-self"],"toc":[{"text":"How it works","slug":"how-it-works","level":"h2","children":[]}],"metadata":{"title":"Pixel Canvas","date":"2026-05-27T04:00:00.000Z","category":"Hardware","featured":true,"draft":false,"tech":["ESP32-S3","Arduino","LovyanGFX","Bash","REST API"],"state":"doing","ai-involvement":"ai-assisted","tags":["hardware","device","dataviz","quantified-self"],"words":530,"images":13,"imageDetails":{"total":13,"cloudinary":13,"withDimensions":0},"links":0,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"How it works","slug":"how-it-works","level":"h2","children":[]}],"type":"post","slug":"projects/pixel-canvas"}},{"slug":"projects/subway-builder","title":"Subway Builder","date":"2026-05-01T04:00:00.000Z","type":"post","tags":["games","simulation","transit","dataviz"],"toc":[{"text":"Metro Savefile Doctor","slug":"metro-savefile-doctor","level":"h2","children":[]}],"metadata":{"title":"Subway Builder","date":"2026-05-01T04:00:00.000Z","category":"Games","featured":true,"url":"https://github.com/ejfox/subway-builder-mods","tech":["JavaScript","Simulation","Transit","Game Modding"],"state":"evolved","ai-involvement":"ai-assisted","tags":["games","simulation","transit","dataviz"],"words":306,"images":11,"imageDetails":{"total":11,"cloudinary":11,"withDimensions":0},"links":2,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"Metro Savefile Doctor","slug":"metro-savefile-doctor","level":"h2","children":[]}],"type":"post","slug":"projects/subway-builder"}},{"slug":"reading/Yau-Visualize This","title":"Visualize This","type":"post","tags":["dataviz","data"],"toc":[{"text":"Visualize This","slug":"visualize-this","level":"h1","children":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}]}],"metadata":{"tags":["dataviz","data"],"words":122,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{"h1":1},"toc":[{"text":"Visualize This","slug":"visualize-this","level":"h1","children":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}]}],"type":"post","slug":"reading/Yau-Visualize This"}}]},"_links":{"self":"https://ejfox.com/blog/tag/dataviz.json","html":"https://ejfox.com/blog/tag/dataviz","tag_page":"/tag/dataviz.json"}}