<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Daria Filozop - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Daria Filozop - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 10 May 2026 16:27:42 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/filozopdaria/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Data Visualization Tools for Svelte Developers
 ]]>
                </title>
                <description>
                    <![CDATA[ Svelte is a front-end framework for building fast and interactive web applications. Unlike many other well-known frameworks, it doesn’t use a virtual DOM. Instead, it turns your code into efficient Ja ]]>
                </description>
                <link>https://www.freecodecamp.org/news/data-visualization-tools-for-svelte-developers/</link>
                <guid isPermaLink="false">69dd2445217f5dfcbd1e423d</guid>
                
                    <category>
                        <![CDATA[ data visualization ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Svelte ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daria Filozop ]]>
                </dc:creator>
                <pubDate>Mon, 13 Apr 2026 17:13:41 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/cd0a2c05-0604-46d2-a9c0-b914a187d492.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Svelte is a front-end framework for building fast and interactive web applications.</p>
<p>Unlike many other well-known frameworks, it doesn’t use a virtual DOM. Instead, it turns your code into efficient JavaScript during the build step, which makes apps smaller and faster. It also makes things reactive in a simple way, so it’s easier to manage data and keep your code clean.</p>
<p>Recently, the buzz around Svelte caught my attention. I wanted to understand what all the hype was about.</p>
<p>After polling <a href="https://www.reddit.com/r/webdevelopment/comments/1lpq27w/any_thoughts_about_svelte/?share_id=uMO0hMk04m4PJz8yk6lgf&amp;utm_content=2&amp;utm_medium=ios_app&amp;utm_name=ioscss&amp;utm_source=share&amp;utm_term=1">the Reddit community</a> for their opinions, their strong recommendations persuaded me to dive in and try it myself.</p>
<p>So, I did some more research to learn more about its distinctive features, and now I want to share this info with you here.</p>
<h2 id="heading-what-well-cover">What We’ll Cover:</h2>
<ul>
<li><p><a href="#heading-1-why-svelte-stands-out">1. Why Svelte Stands Out</a></p>
</li>
<li><p><a href="#heading-2-charts">2. Charts</a></p>
<ul>
<li><p><a href="#heading-layer-cake">Layer Cake</a></p>
</li>
<li><p><a href="#heading-fusioncharts">FusionCharts</a></p>
</li>
<li><p><a href="#heading-highcharts">Highcharts</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-3-pivot-tables">3. Pivot Tables</a></p>
<ul>
<li><a href="#heading-flexmonster">Flexmonster</a></li>
</ul>
</li>
<li><p><a href="#heading-4-grids">4. Grids</a></p>
<ul>
<li><a href="#heading-svar">SVAR</a></li>
</ul>
</li>
<li><p><a href="#heading-5-wrapping-up">5. Wrapping Up</a></p>
</li>
</ul>
<h2 id="heading-why-svelte-stands-out"><strong>Why Svelte Stands Out</strong></h2>
<p>One of Svelte's key features is that it has no virtual DOM and compiles your code during the build process. This makes your apps built with Svelte much faster compared to those built with other frameworks.</p>
<p>Svelte also makes apps reactive in a simple way by declaring variables. The code stays clean and easy to read, with scoped styles that don’t mix into other parts of the app.</p>
<p>It also has built-in animations and transitions, plus an easy store system for sharing state between components.</p>
<p>Beyond all this, Svelte focuses on accessibility, supports TypeScript, and delivers excellent performance thanks to its compile-time approach.</p>
<p>I think this <a href="https://github.com/sveltejs/svelte/discussions/10085">quote from Svelte creator Rich Harris</a> perfectly sums up his reason for creating this framework:</p>
<blockquote>
<p><em>“We're not trying to be the most popular framework; we're trying to be the best framework. Sometimes that means making choices that we believe in but that go against the grain of web development trends.”</em></p>
</blockquote>
<p>It seems like many developers admire this approach. According to the <a href="https://survey.stackoverflow.co/2025/technology#admired-and-desired">2025 StackOverflow Developer Survey</a>, Svelte is admired by 62.4% of respondents and desired by 11.1%. This suggests that it's catching up to more established frameworks like React, Angular, and Vue.</p>
<p>I've also noticed the continuous growth of the Svelte community. This expanding network provides strong support, with a variety of tools and libraries, and active channels on <a href="https://www.reddit.com/r/sveltejs/">Reddit</a> and <a href="https://discord.com/invite/svelte">Discord</a> where you can get advice from experienced developers.</p>
<p>My recent work on personal data visualization projects has shown me how powerful and enjoyable Svelte can be. But in my experience, there aren't yet many tools for working with Svelte. So to help my fellow developers, I’ve decided to share my experiences and recommend my 5 favorite data visualization tools that smoothly integrate with Svelte and work perfectly with it.</p>
<p>For convenience, I’ve divided them into three categories: Charts, Pivot Tables, and Grids. So, if you want to find something specific, you can go to the appropriate section.</p>
<h2 id="heading-charts"><strong>Charts</strong></h2>
<p>You use charts when you need to explain data clearly and visually, such as showing trends over time, comparing groups, or quickly highlighting key differences.</p>
<p>Here are some charting tools that integreat well with Svelte:</p>
<h3 id="heading-1-layer-cake"><strong>1.</strong> <a href="https://layercake.graphics/"><strong>Layer Cake</strong></a></h3>
<p>Layer Cake is an open-source graphics framework for Svelte that allows you to create a wide variety of charts, from columns to a multilayer map. On Reddit, the creator of LayerCake <a href="https://www.reddit.com/r/sveltejs/comments/194dfrg/comment/khhal06/">shares some insights</a> about his project:</p>
<blockquote>
<p><em>“It’s designed to give you the basic elements you need to make a responsive chart (D3 scales, SVG, canvas, etc) and lets you customize the rest in user-land.”</em></p>
</blockquote>
<p>The nice thing is that the creator actively responds to feedback, which helps make the product better.</p>
<p>LayerCake suggests using five types of components:</p>
<ul>
<li><p><a href="https://layercake.graphics/components#axis">Axis</a></p>
</li>
<li><p><a href="https://layercake.graphics/components#chart">Chart</a></p>
</li>
<li><p><a href="https://layercake.graphics/components#map">Map</a></p>
</li>
<li><p><a href="https://layercake.graphics/components#interaction">Interaction</a></p>
</li>
<li><p><a href="https://layercake.graphics/components#annotation">Annotation</a></p>
</li>
</ul>
<p>Also, <a href="https://github.com/mhkeller/layercake">with over 1.5k stars on GitHub</a>, the project is actively maintained and can be easily installed via npm.</p>
<p>Layer Cake is a good option when you need to build something unique rather than use pre-built chart templates.</p>
<p>License: MIT</p>
<h3 id="heading-2-fusioncharts"><strong>2.</strong> <a href="https://www.fusioncharts.com/svelte-charts?framework=svelte"><strong>FusionCharts</strong></a></h3>
<p>FusionCharts is a JavaScript charting library that suggests over 100 interactive charts and around 2,000 data-driven maps. It offers a special Svelte component called <a href="https://github.com/fusioncharts/svelte-fusioncharts">svelte-fusioncharts</a> that makes adding charts to apps simple.</p>
<p>FusionCharts is a commercial tool, but there's a trial version that you can use to try it out. You can also use it for free for non-commercial purposes (there will be a watermark).</p>
<p><a href="https://www.g2.com/products/fusioncharts/reviews">Based on user reviews on G2</a>, devs like FusionCharts for its extensive variety of chart types, its ability to handle large datasets quickly, and its easy implementation with strong customization options.</p>
<p>But they also report a decline in product support over the last few years, noting that fixing bugs can take a long time.</p>
<p>I really liked using their new <a href="https://www.fusioncharts.com/askfusiondev-ai">FusionDev AI</a> feature. It was super convenient to quickly get answers from the documentation and even some guidance on creating or customizing charts.</p>
<p>They work pretty well for business dashboards and enterprise apps that need a wide variety of ready-made charts and a quick setup (especially useful when working with large datasets).</p>
<p>License: Commercial</p>
<h3 id="heading-3-highcharts"><strong>3.</strong> <a href="https://www.highcharts.com/integrations/svelte/"><strong>Highcharts</strong></a></h3>
<p>Like FusionCharts, Highcharts is a commercial charting library that provides various chart types. <a href="https://www.g2.com/products/highcharts/reviews">Users highlight</a> its ease of use and effortless setup using simple code. It also has many customization options available.</p>
<p>While it may be pricier than some alternatives, many businesses find its advantages worthwhile: after all, 80 of the world's 100 largest companies use Highcharts. It's also a great option for non-commercial projects, which can use its free version.</p>
<p>Their wrapper <a href="https://github.com/highcharts/highcharts-svelte">@highcharts/svelte</a> lets you quickly integrate Highcharts into Svelte apps. It works with all their chart types and provides full customization.</p>
<p>Also, if you want an active community, Highcharts is a great option. They recently they created a <a href="https://discord.com/invite/xHxxcyyy6K">Discord server</a>, where you can share your projects or get inspiration for new ones.</p>
<p>Highcharts is a great choice for analytical platforms and financial dashboards. So if you need reliable, interactive charts with minimal effort, it's a perfect match.</p>
<p>License: Commercial</p>
<h2 id="heading-pivot-tables"><strong>Pivot Tables</strong></h2>
<p>You use pivot tables to quickly group and summarize big datasets. It lets you group data by categories, calculate totals or averages, and reorganize your information dynamically.</p>
<h3 id="heading-flexmonster"><a href="https://www.flexmonster.com/doc/integration-with-svelte/"><strong>Flexmonster</strong></a></h3>
<p>Flexmonster is a JavaScript pivot table library that allows you to quickly analyze and visualize data.</p>
<p>It's a commercial product, but it also has a full-featured trial version, plus they have a free entry license for dev purposes.</p>
<p><a href="https://www.g2.com/products/flexmonster-pivot-table-charts-component/reviews">From the reviews on G2</a> and <a href="https://www.capterra.com/p/138272/Flexmonster-Pivot-Table/">Capterra</a>, user feedback highlights a consistent trade-off: while the price is often cited as a con, the consensus is that its value justifies the cost. Users praise its speed, smooth integration with web apps, similarity to Excel, and ability to manage vast datasets without problems. People also cite the ability to create clear reports and exports.</p>
<p>As an enterprise solution, Flexmonster offers a wide range of options to customize reports entirely according to a project's specific needs. Also, the product is continuously updated, and customer support is one of its core strengths. Users consistently note that support is responsive, clear, and helpful, which ensures smooth adoption and reliable problem-solving.</p>
<p>Flexmonster now provides a wrapper for Svelte, which makes it easy to integrate pivot tables into Svelte apps without extra setup. They also provide a <a href="https://github.com/flexmonster/pivot-svelte">GitHub sample</a> that demonstrates many useful features. For example, it shows how to configure a pivot table, handle user interactions through events, work with Flexmonster's API, and much more. Altogether, it gives a clear picture of how to build a fully interactive reporting dashboard in a Svelte app.</p>
<p>By the way, <a href="https://youtu.be/rLJ5cyOVwl4?feature=shared">their video about integrating Flexmonster with Svelte</a> was the one I used, and it was very helpful.</p>
<p>Flexmonster also smoothly integrates with Highcharts and FusionCharts. You can find <a href="https://www.flexmonster.com/doc/available-tutorials-charts/">tutorials about these on their official webpage</a>.</p>
<p>Flexmonster is a great fit for a wide range of data-heavy applications. It’s a powerful engine for data visualization and analysis, and thanks to its flexibility and customization options, it can be easily integrated into almost any application, such as financial reporting, sales analysis, and audit systems.</p>
<p>License: Commercial</p>
<h2 id="heading-grids"><strong>Grids</strong></h2>
<p>A grid presents data in a structured table format, focusing on viewing, managing, and interacting with individual records.</p>
<h3 id="heading-svar"><a href="https://svar.dev/svelte/datagrid/"><strong>SVAR</strong></a></h3>
<p>SVAR is lightweight and compatible with Svelte's datagrid component, which helps you work quickly with big datasets.</p>
<p>It’s a relatively new tool, released in 2025, so there are fewer user reviews, but it seems to be growing in popularity. And for now, you can try it yourself because it’s completely free! It also covers all the key data viz use cases, like sorting, filtering, grouping, and editing data.</p>
<p>User support is one of SVAR’s strengths. The creators and community are active, and the <a href="https://forum.svar.dev/">SVAR Forum</a> offers reliable help whenever you need it.</p>
<p>So, it's a good option for apps that need to display and edit structured data, such as admin panels.</p>
<p>License: MIT</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>This was a small list of tools I recommend for data visualization while using Svelte. There are many more tools out there, but these stand out as stable, helpful, and easy to integrate. I hope that after reading this article, you’ve found the one that suits you the most.</p>
<p>Personally, these caught my attention because they're all pretty intuitive and provide powerful results. If you know other great tools, feel free to share your favorites with me!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Build an Interactive University Ranking System Using React and Data Viz Tools ]]>
                </title>
                <description>
                    <![CDATA[ Hi! I'm Daria, and I'm a software engineering student with a keen interest in data visualization. I've been actively exploring various visualization tools through small pet projects, and I'd like to s ]]>
                </description>
                <link>https://www.freecodecamp.org/news/build-an-interactive-ranking-system-using-react-and-data-viz-tools/</link>
                <guid isPermaLink="false">69c44d7d10e664c5daefbf5c</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ #data visualisation ]]>
                    </category>
                
                    <category>
                        <![CDATA[ charts ]]>
                    </category>
                
                    <category>
                        <![CDATA[ pivottable ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daria Filozop ]]>
                </dc:creator>
                <pubDate>Wed, 25 Mar 2026 21:02:53 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/5f31dd6f-e199-4cf3-a76a-daf985a4e7d7.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hi! I'm Daria, and I'm a software engineering student with a keen interest in data visualization. I've been actively exploring various visualization tools through small pet projects, and I'd like to share my latest demo with you.</p>
<p>In this tutorial, we'll build a project that displays the historical rankings of universities around the world. It's interesting to check out and analyze which institutions consistently maintain their top-tier positions and which ones experience significant movement up or down the rankings over the years.</p>
<p>While building the dashboard, we'll load and structure the dataset, display all important information in a pivot table, and then create charts to visualize the top 10 universities and their ranking trends over time.</p>
<p>Even though we'll walk through this specific example here, you can apply this same approach to many other datasets to build data viz dashboards.</p>
<h2 id="heading-what-well-cover">What We’ll Cover:</h2>
<ol>
<li><p><a href="#heading-tech-stack">Tech Stack</a></p>
</li>
<li><p><a href="#heading-flexmonster-pivot-table-setup">Flexmonster Pivot Table Setup</a></p>
</li>
<li><p><a href="#heading-loading-and-displaying-the-data">Loading and Displaying the Data</a></p>
</li>
<li><p><a href="#heading-creating-charts">Creating Charts</a></p>
</li>
<li><p><a href="#heading-adding-year-filtering-buttons">Adding Year Filtering Buttons</a></p>
</li>
<li><p><a href="#heading-styling">Styling</a></p>
</li>
</ol>
<h2 id="heading-tech-stack">Tech Stack</h2>
<p>Let’s talk about the tools we’ll be using so you know what you’ll need to have before following along.</p>
<p>First, we’ll use <a href="https://react.dev/"><strong>React</strong></a>, which is a popular JavaScript library for building interactive web interfaces. It helps create reusable components and manage data efficiently. According to <a href="https://survey.stackoverflow.co/2025/technology"><strong>the 2025 Stack Overflow Developer Survey</strong></a>, React is the second most popular web framework.</p>
<p>We’ll also use <a href="https://www.flexmonster.com/"><strong>Flexmonster Pivot Table</strong></a>, a web component for displaying data in a table format. In general, pivot tables are widely used for data visualization because they allow you to quickly group, aggregate, filter, and explore large datasets from different perspectives.</p>
<p>With Flexmonster, you can easily create reports and customize your information. It also integrates smoothly with almost all popular modern frameworks (like React, which we’re using here!).</p>
<p>Next, we have <a href="https://echarts.apache.org/en/index.html"><strong>ECharts</strong></a>, which complements the detailed data provided by the pivot table. It’s a powerful, open-source charting library that’ll give us the visual insights we need, offering over 20 chart types to effectively visualize historical university ranking trends.</p>
<p>Finally, we’ll use the <a href="https://www.kaggle.com/datasets/mylesoneill/world-university-rankings"><strong>World University Rankings Dataset</strong></a>. It contains data from three global rankings (<a href="https://www.timeshighereducation.com/world-university-rankings"><strong>THE</strong></a>, <a href="https://www.shanghairanking.com/"><strong>ARWU</strong></a>, and <a href="https://cwur.org/"><strong>CWUR</strong></a>), providing information about well-known universities from 2012 to 2015 for detailed analytical research. The dataset size is 186.38 kB.</p>
<p>As a small disclaimer, this tutorial uses React, so some familiarity with it will help you follow along. But actually, you can use any other framework that's convenient for you. Flexmonster Pivot Table offers <a href="https://www.flexmonster.com/doc/available-tutorials-integration/">many integrations with popular frameworks</a>, including Angular, Vue, Svelte, and more.</p>
<p>When we’re done with the project, we’ll get an interactive dashboard like this:</p>
<img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXe49D_OM3dE-Q8bLmhsYyejXE0CF0PZTZeXhm_3vJfCDOO8JmQMCbLk8x_d_FBAWJjcsKFd0Mm3uTntW2zcp6NYGMXUVnyfjpwWI0izXInLvUhcHgtoSPoCt4EFtHpVm5WOzP-khwnxPryrgO1FjEUqWXSEWtI?key=44ff_UPj0hN24gZs8A8Dew" alt="Interactive dashboard for visualizing university ratings" width="600" height="400" loading="lazy">

<p>So now that you’re familiar with the tools, let’s get started!</p>
<h2 id="heading-flexmonster-pivot-table-setup">Flexmonster Pivot Table Setup</h2>
<p>To get started, you’ll need to integrate Flexmonster into your React project. I’ll walk you through how it works with React, but you can use other frameworks, too. You can find complete instructions in <a href="https://www.flexmonster.com/doc/available-tutorials-integration/"><strong>the Flexmonster docs</strong></a>.</p>
<p>First, create a React application using Vite:</p>
<pre><code class="language-shell">npm create vite@latest flexmonster-project -- --template react
</code></pre>
<p>Also, don’t forget to install npm dependencies:</p>
<pre><code class="language-shell">cd flexmonster-project
npm install
</code></pre>
<p>Next, we’ll install the Flexmonster wrapper for React. To do this, use this command:</p>
<pre><code class="language-shell">npm install -g flexmonster-cli
flexmonster add react-flexmonster
</code></pre>
<p>Then add Flexmonster styles and the component to your App.jsx file:</p>
<pre><code class="language-javascript">import FlexmonsterReact from "react-flexmonster";
import "flexmonster/flexmonster.css";
</code></pre>
<h2 id="heading-loading-and-displaying-the-data">Loading and Displaying the Data</h2>
<p>Now it’s time to create a report object. This is a configuration that defines how the pivot table should load and display data. It describes how the fields should be interpreted, and how the table should organize and aggregate the information.</p>
<p>The first part of this is <code>dataSource</code>. It defines where the data comes from and how it should be read by the pivot table (format of the dataset, location of the file, and the structure of the fields that will be used).</p>
<p>In our case, we'll load a CSV file that contains the university rankings dataset and define the fields that will appear in the pivot table:</p>
<pre><code class="language-javascript">&nbsp;&nbsp;const report = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: "csv",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename: "/data/world-university-rankings.csv",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapping: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world_rank: { type: "number", caption: "World Rank" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;institution: { type: "string" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;country: { type: "string" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;score: { type: "number", caption: "Score" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;year: { type: "number", caption: "Year" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
…
}
</code></pre>
<p>The second part is the slice section. It defines which subset of the dataset will be displayed and how it should be organized. There, you'll render a table by setting measures, rows, and columns. You can also set the <code>flatOrder</code> property, where you define the order of the fields in the flat form.</p>
<p>You can find more detailed information about the <a href="https://www.flexmonster.com/api/slice-object/"><strong>Slice Object here</strong></a>. There are lots of interesting functional possibilities!</p>
<pre><code class="language-javascript">const report = {
…
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slice: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows: [{ uniqueName: "institution" }],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columns: [{ uniqueName: "[Measures]" }],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;measures: [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ uniqueName: "world_rank", aggregation: "min" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uniqueName: "year",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aggregation: "none",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filter: { members: [`year.[${selectedYear}]`] },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flatOrder: ["institution", "world_rank"],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid: { type: "flat", showGrandTotals: "off" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;};
</code></pre>
<p>You’ll also need to include Flexmonster inside the React component. In this example, we'll include the <code>FlexmonsterReact</code> tag in JSX and pass the report object (which we defined earlier) as a property. You can do that with this code snippet:</p>
<pre><code class="language-javascript">&lt;FlexmonsterReact
&nbsp;&nbsp;&nbsp;&nbsp;ref={pivotRef}
&nbsp;&nbsp;&nbsp;&nbsp;toolbar={true}
&nbsp;&nbsp;&nbsp;&nbsp;report={report}
&nbsp;&nbsp;&nbsp;&nbsp;width="100%"
&nbsp;&nbsp;&nbsp;&nbsp;height="100%"
&nbsp;&nbsp;&nbsp;&nbsp;reportcomplete={createChart}
/&gt;
</code></pre>
<p>As a result, we've got pivot table with all the info about the universities:</p>
<img src="https://cdn.hashnode.com/uploads/covers/690da61ea51d4259bd4a849b/ab96b9fc-c322-482c-b95a-33d17887a94e.png" alt="Pivot table with university data and rankings" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<h2 id="heading-creating-charts">Creating Charts</h2>
<p>For some users, charts are easier to understand than tables, so let’s also create some now. I decided to display the top 10 universities in the world using bar charts. Bar charts are commonly used to compare values between categories, and they're quite useful for highlighting rankings or top performers.</p>
<p>We'll use ECharts here, but you can easily integrate Flexmonster with <a href="https://www.flexmonster.com/doc/available-tutorials-charts/"><strong>the most convenient chart library for you</strong></a>.</p>
<p>As a first step, make sure to install ECharts in your project:</p>
<pre><code class="language-shell">npm install echarts
</code></pre>
<p>To prepare our data for display in the charts, we’ll create the <code>prepareData()</code> function. This function picks out the universities' names and their ranks, removes any invalid data, sorts it by rank, and keeps only the top 10. It returns two arrays: one with the names (for chart labels) and another with the rankings (for chart values):</p>
<pre><code class="language-javascript">const prepareData = (rawData) =&gt; {
&nbsp;&nbsp;&nbsp;&nbsp;const rows = rawData.data
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map((r) =&gt; ({ name: r.r0, rank: r.v0 }))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter((r) =&gt; r.name &amp;&amp; !isNaN(r.rank))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.sort((a, b) =&gt; a.rank - b.rank)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.slice(0, 10);
&nbsp;&nbsp;&nbsp;&nbsp;return {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labels: rows.map((r) =&gt; r.name).reverse(),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values: rows.map((r) =&gt; r.rank).reverse(),
&nbsp;&nbsp;&nbsp;&nbsp;};
};
</code></pre>
<p>Next, we'll set up chart options. You’ll need to decide in what form your dataset will be displayed: in this example, we'll choose a bar chart. We'll also set the title (here "Top 10 Universities by World Rank"), x-axis (shows the rank numbers) and y-axis (shows universities names), and tooltip, which shows info when you hover over a bar.</p>
<p>Also, don't forget to initialize the chart and apply these options. You can do all this with this code snippet:</p>
<pre><code class="language-javascript">const drawChart = (rawData) =&gt; {
&nbsp;&nbsp;&nbsp;&nbsp;const { labels, values } = prepareData(rawData);
&nbsp;&nbsp;&nbsp;&nbsp;const options = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text: "Top 10 Universities by World Rank",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left: "center",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textStyle: { fontSize: 20, fontWeight: "bold" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tooltip: { trigger: "axis", axisPointer: { type: "shadow" } },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xAxis: { type: "value", name: "Rank" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yAxis: { type: "category", data: labels },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;series: [{ type: "bar", data: values, barMaxWidth: 30 }],
&nbsp;&nbsp;&nbsp;&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;chartInstance = echarts.init(chartRef.current);
&nbsp;&nbsp;&nbsp;&nbsp;chartInstance.setOption(options);
};
</code></pre>
<p>Also, an important part of chart configuration is the <code>updateCharts()</code> function, which redraws the chart when needed:</p>
<pre><code class="language-javascript">const updateChart = (rawData) =&gt; {
&nbsp;&nbsp;&nbsp;&nbsp;if (chartInstance) chartInstance.dispose();
&nbsp;&nbsp;&nbsp;&nbsp;drawChart(rawData);
};
</code></pre>
<p>So now we can see the charts we've created! This might look a bit basic and really hard to read, but don’t worry – we’ll make it look nicer and easier to understand in a later section.</p>
<img src="https://cdn.hashnode.com/uploads/covers/690da61ea51d4259bd4a849b/65cf5e06-f0dd-4d45-b1eb-e78797b44d2b.png" alt="Bar charts showing the top 10 universities by world rank" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<h2 id="heading-adding-year-filtering-buttons">Adding Year Filtering Buttons</h2>
<p>You might have noticed that the dataset contains ratings for different years (from 2012 to 2015). It would be great if we could use the whole dataset, not just information for one year.</p>
<p>To manage this, we'll create filtering buttons for each year to provide more straightforward navigation.</p>
<p>First, we’ll add a div element which contains buttons for each year:</p>
<pre><code class="language-javascript">&lt;div className="years-container"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;{[2012, 2013, 2014, 2015].map((year) =&gt; (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key={year}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onClick={() =&gt; handleYearChange(year)}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className={`year-btn ${selectedYear === year ? "active" : ""}`}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{year}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;
&nbsp;&nbsp;&nbsp;&nbsp;))}
&lt;/div&gt;
</code></pre>
<p>In the above code snippet, you can see that each button calls <code>handleYearChange(year)</code> when being clicked. Let’s now examine what this handler does:</p>
<pre><code class="language-javascript">const handleYearChange = (year) =&gt; {
&nbsp;&nbsp;&nbsp;&nbsp;setSelectedYear(year);

&nbsp;&nbsp;&nbsp;&nbsp;const pivot = pivotRef.current?.flexmonster;
&nbsp;&nbsp;&nbsp;&nbsp;if (pivot) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const newReport = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...report,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slice: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...report.slice,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;measures: [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ uniqueName: "world_rank", aggregation: "min" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uniqueName: "year",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aggregation: "none",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filter: { members: [`year.[${year}]`] },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivot.setReport(newReport);
&nbsp;&nbsp;&nbsp;&nbsp;}
};&nbsp;
</code></pre>
<p>This function modifies the pivot table report to filter by that year, and refreshes the table. This way, clicking a button instantly shows only the data for the chosen year.</p>
<p>And now we've got buttons which display years from our dataset:</p>
<img src="https://cdn.hashnode.com/uploads/covers/690da61ea51d4259bd4a849b/184608a5-6207-44d8-b5fe-80fd355201c0.png" alt="Buttons to filter data by year" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<h2 id="heading-styling">Styling</h2>
<p>Finally, here’s my favorite part of every project: customization! I love experimenting with different styles and choosing the most appropriate one.</p>
<p>For this dashboard, I chose light violet and white colors to make the interface clean and easy to read. I personally associate the university vibe with these colors, so I think they match our dashboard perfectly. So let's go step by step through it.</p>
<p>The main container defines the overall layout and background. It centers the content on the page, adds some spacing, and sets the base font and colors.</p>
<pre><code class="language-javascript">.app-container {
    min-height: 100vh;
    width: 100vw;
    padding: 32px;
    display: flex;
    flex-direction: column;
    align-items: center;

    background: #ebe6f7;
    font-family: "Inter", system-ui, -apple-system, sans-serif;
    color: #1b2a4e;
}
</code></pre>
<p>Next, we'll style the year filter buttons. They have rounded corners, a soft shadow, and a small hover effect so the interface feels interactive. The active button gets a violet background so it’s easy to see which year is selected.</p>
<pre><code class="language-javascript">.year-btn {
    padding: 10px 20px;
    background: #ffffff;
    border: 1px solid #cdd2e0;
    border-radius: 8px;
    cursor: pointer;
}

.year-btn:hover {
    background: #e1dffa;
}

.year-btn.active {
    background: #6c5ce7;
    color: white;
}
</code></pre>
<p>Also, the pivot table and the chart are located inside simple containers with rounded corners and slight shadows. This visually separates the components and keeps the layout logically structured.</p>
<pre><code class="language-javascript">.pivot-container,
.chart-container {
    width: 90%;
    background: #ffffff;
    border-radius: 12px;
    padding: 14px;
    box-shadow: 0 6px 20px rgba(15, 35, 95, 0.12);
}

.pivot-container {
    height: 56vh;
    margin-bottom: 24px;
}

.chart-container {
    height: 40vh;
}
</code></pre>
<p>And now, here's the result of our work!</p>
<img src="https://cdn.hashnode.com/uploads/covers/690da61ea51d4259bd4a849b/ed35dbdd-9c5d-4f7e-b6e1-4f0546a0d660.png" alt="Universities ranking pivot table with interactive year filters" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<img src="https://cdn.hashnode.com/uploads/covers/690da61ea51d4259bd4a849b/1a0b0f1c-9c26-40e2-8c28-bd45517ea145.png" alt="Charts showing the top 10 universities by world rank" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>In this tutorial, we've build an interactive dashboard for visualizing the world's top university rankings over the years. You learned how to load and show data in pivot table in a convenient and compact way, make bar charts to show comparative data, and add buttons to filter info by year.</p>
<p>You can now use these skills to visualize other datasets and play with different charts and customization options.</p>
<p>If you want to look closer at my code and get detailed styling code, you can check out my GitHub: <a href="https://github.com/filozopdasha/universities-dashboard"><strong>https://github.com/filozopdasha/universities-dashboard</strong></a></p>
<p>I would be delighted to hear your thoughts about this small project. I’m curious to see what you build!</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
