plot
echarts
Our great sponsors
plot | echarts | |
---|---|---|
38 | 17 | |
3,862 | 58,944 | |
3.3% | 1.0% | |
9.1 | 8.7 | |
6 days ago | 3 days ago | |
HTML | TypeScript | |
ISC License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
plot
-
Vega-Altair: Declarative Visualization in Python
I love Vega(-lite) / Altair, the grammar of graphics plotting system is really great to build any kind of chart even when it wasn't thought through by the authors of the library. There are other wrappers for languages that lack viz libraries, such as Elixir / Livebook [0]
However, when I used it a couples years back it struggled with large vizs, I think due to Vega(-lite)'s way of embedding the data in the viz artifact.
Also, interactive is nice but often I just need a quick static plot, and matplotlib is more convenient for this, you can easily see the png in any environment etc.
These days I'm eager to see an Observable Plot [1] wrapper for Python !
[0] https://github.com/livebook-dev/vega_lite
[1] https://github.com/observablehq/plot
-
Observable 2.0, a static site generator for data apps
Good questions.
1. It’s just JavaScript so you can fetch stuff dynamically too (see https://observablehq.com/framework/lib/duckdb). But yeah, only client-side. (Though see https://github.com/observablehq/framework/issues/234.)
2. Sure, it’s all open source, I bet you could make that work. Or `yarn deploy` to Observable and configure sharing there (though it wouldn’t let you charge others).
3. Yup. Which is part of the appeal of model of running data loaders at build time: you can query some private data and viewers would only be able to see the final result set. (The lack of something like this has always been a huge problem for Observable notebooks. You’d make some great query-driven charts and then couldn’t make it public without some awkward manual dance of downloading and re-uploading a file to a fork of the notebook.)
4. I wish I knew! It’s being tracked here https://github.com/observablehq/plot/issues/1711. Lately there’s been a lot more work on Framework naturally but now that that’s out…
5. Another good question. We’re definitely interested in tailoring it more to this sort of use case but lots is TBD!
-
Using Deno with Jupyter Notebook to build a data dashboard
Observable Plot: A library built on top of D3.js used to visualize data and iterate more quickly on different plot chart
-
What website frameworks are used to build these websites?
https://observablehq.com/
-
Yandex open sourced it's BI tool DataLens
Observable Plot [0] is also nice. AFAIU it's the same library powering the visualizations within Observable itself.
[0] https://observablehq.com/plot/
-
Best React charting libraries for data visualizations
I liked observablehq plot library: https://github.com/observablehq/plot
- Bank Failures Visualized
- Observable Plot: A JavaScript library for exploratory data visualization
- Observable Plot: The JavaScript library for exploratory data visualization
echarts
-
A web crawler program for crawling Echarts official website examples implemented by Puppeter
import puppeteer from "puppeteer"; import fs from "node:fs"; import { storiesTpl, storiesArgs, generOptions, generOptionsWithFn, } from "./template.mjs"; const ECHARTS_BASE_URL = "https://echarts.apache.org/examples/en/index.html"; function capitalizeFirstLetter(str) { if (!str || str.length === 0) { return ""; } str = str.toLowerCase(); return str.charAt(0).toUpperCase() + str.slice(1); } (async function () { const browser = await puppeteer.launch(); const page = await browser.newPage(); // Navigate the page to a URL await page.goto(ECHARTS_BASE_URL); // Set screen size await page.setViewport({ width: 1080, height: 1024 }); // Type into search box // const examples = await page.type([".example-list-panel"]); const searchResultSelector = ".example-list-panel > div"; const results = await page.$$(searchResultSelector); for (const element of results) { // gener namespace const ele = await element.$(".chart-type-head"); const title = await ele.evaluate((el) => el.textContent); let namespace = title.split(" ").filter(Boolean); namespace = namespace.slice(0, namespace.length - 1); namespace = namespace .map((item) => item.replace("\n", "").replace("/", "")) .filter(Boolean) .join(""); console.log(`${namespace} start`); const instances = await element.$$(".row .example-list-item"); const components = []; for (const instance of instances) { // title const titleElement = await instance.$(".example-title"); const subTitle = await titleElement.evaluate((el) => el.textContent); const titles = subTitle .split(" ") .filter(Boolean) .map((item) => item .replace(/\+/g, "") .replace(/\(/g, "") .replace(/\)/g, "") .replace(/-/g, "") ); const title = titles.map((item) => capitalizeFirstLetter(item)).join(""); const link = await instance.$(".example-link"); const newPagePromise = new Promise((resolve) => { browser.on("targetcreated", async (target) => { if (target.type() === "page") { const targetPage = await target.page(); const url = await targetPage.url(); if (url.includes("editor")) { resolve(targetPage); } } }); }); await link.click(); const newPage = await newPagePromise; await newPage.setViewport({ width: 40000, height: 20000 }); await newPage.waitForSelector(".ace_text-layer"); await new Promise((resolve) => { setTimeout(() => { resolve(); }, 3000); }); let content = await newPage.evaluate( () => document.querySelector(".ace_text-layer").innerText ); content = content .replace(/\[\]/g, "[] as any") .replace(//g, "") .replace(/var/g, "let"); let options; if (content.includes("myChart")) { options = generOptionsWithFn({ options: content }); } else { options = generOptions({ options: content }); } components.push({ options, title }); await newPage.close(); } const args = components .filter(({ options }) => { if (options.includes("$")) return false; return true; }) .map(({ options, title }) => storiesArgs({ options: options, name: title }) ) .join("\r\n"); const scripts = storiesTpl({ namespace: `Charts/${namespace}`, components: args, }); fs.writeFileSync(`./bots/assests/${namespace}.stories.ts`, scripts); console.log(`${namespace} end`); } })();
-
Show HN: Paisa – Open-Source Personal Finance Manager
I want to know where my money goes. I like to look at stacked-area (or column) charts of the categories of spending. To make this work I have some software I made ~20 years ago that does double-entry book-keeping. At the end of the month, I import statements from financial service providers (eg: Wells Fargo, Chase, PayPal, Stripe, etc). Lots of stuff is repeat purchases (eg: Shell Gas) and my software automatically categorises. Some transactions I have to categorise manually. Each category / vendor becomes an expense-account and my banks and CCs exist as assets and liabilities.
Once the import and reconciliation is done I pull up a my column chart that shows where the money went -- and can compare over time -- see a full year of movement. I've been through various charting libraries with it and most recently moved to ECharts[0] -- so I'm planning to expand with Treemap and Sankey style visuals.
The import process, which I do monthly takes maybe an hour. I'm importing from like 5 bank accounts, 3 payment processors, 4 CC providers. The part that takes the longest is signing into their slow sites, navigating past pop-up/interstitial, getting to their download page and waiting for it to download. Loads of these sites (WF, Chase) have been "modernised" and have some real bullshit UI/UX going on -- lags, no keyboard, elements jump around, forms can't remember state, ctrl+click won't open in a new page cause that damned link isn't actually a link but some nested monster of DIVs with 19 event listeners on each one -- and somehow still all wrong.
I think the most-best feature would be to have some tool automatically get all my transactions from all these providers into one common format. Gimmee some JSON with like 10 commonly-named fields for the normal stuff and then 52 other BS fields that each provider likes to add (see a PayPal CSV for example). Does that exist and I just don't know?
[0] https://echarts.apache.org/
-
Personal Sträva Activity Statistics
Coded mainly in Perl and Gnuplot, recently extended by Python Pandas and JavaScript Tabulator and ECharts
-
Build complex SPAs quickly with vue-element-admin
Dashboards have a lot of charts for different forms and data. This is another common requirement. This template recommends Apache ECharts, a powerful, easy-to-use, and flexible JavaScript visualization library.
-
Using Apache ECharts in React Native - wrn-echarts
We have developed an open source graphics library for react native APP, which is based on Apache ECharts and uses RNSVG or RNSkia for rendering in a way that is almost identical to using it in the web, and can satisfy most graphics situations. The project source code is available at https://github.com/wuba/wrn-echarts .
-
Best practice for UI design in scientific app
apache-echarts for charting system (it has 3d chart anyway)
- [OC] The crude birth rate in European Union from 1960 to 2020
-
Use types (which import other types that reference the DOM) inside a web-worker!
How are you importing the definition? Assuming you are using "apache/echarts" and not some other lib named "echarts", you should be able to import DatasetModel directly and let tree shaking trim out what you're not using.
-
Pulling and visualizing data from a database client side
ECharts -- open source js lib for enterprise-grade charts
- [OC] U.S. Inflation Reach High in 20 Years
What are some alternatives?
plot-react - React wrapper for @observablehq/plot
Chart.js - Simple HTML5 Charts using the <canvas> tag
blazor-samples - Explore and learn Syncfusion Blazor components using large collection of demos, example applications and tutorial samples
d3 - Bring data to life with SVG, Canvas and HTML. :bar_chart::chart_with_upwards_trend::tada:
go-echarts - 🎨 The adorable charts library for Golang
Highcharts JS - Highcharts JS, the JavaScript charting framework
vega - A visualization grammar.
gonum - Gonum is a set of numeric libraries for the Go programming language. It contains libraries for matrices, statistics, optimization, and more
Frappe Gantt - Open Source Javascript Gantt
cli-d3 - Generate d3 plots from the command-line.
apexcharts.js - 📊 Interactive JavaScript Charts built on SVG