Composable data visualisation library for web with a data-first approach now powered by WebAssembly

Overview



muzejs




Free License NPM version Contributors

What is Muze?

Muze is a free data visualization library for creating exploratory data visualizations (like Tableau) in browser, using WebAssembly. It uses a layered Grammar of Graphics (GoG) to create composable and interactive data visualization for web. It is ideal for use in visual analytics dashboards & applications to create highly performant, interactive, multi-dimensional, and composable visualizations.

It uses a data-first approach to define the constructs and layers of the chart, automatically generates cross-chart interactivity, and allows you to over-ride any behavior or interaction on the chart.

Muze uses an in-browser DataModel to store and transform data, and control the behaviour of every component in the visualization, thereby enabling creating of complex and cross-connected charts.

Features

  • πŸ— Build complex and interactive visualizations by using composable layer constructs.

  • πŸ”¨ Use rich data operators to transform, visualize and interact with data.

  • πŸ‘― Define custom interactions by configuring physical behavioural model and side effect.

  • βœ‚οΈ Use css to change look and feel of the charts.

  • β˜€οΈ Have a single source of truth for all your visualization and interaction controlled from data.

  • πŸ”© Integrate easily with your existing application by dispatching actions on demand.

  • πŸš€ Uses WebAssembly for handling huge datasets and for better performance.

Installation

CDN

Insert the muze build and the required CSS into the <head>:

<link href="https://cdn.jsdelivr.net/npm/@chartshq/[email protected]/dist/muze.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/@chartshq/[email protected]/dist/muze.js" type="text/javascript"></script>

NPM

Install muze from NPM:

$ npm install @chartshq/muze

Then you need to add a webpack plugin copy-webpack-plugin to copy some required muze files to your output dist or build folder.

npm install [email protected] --save-dev

And then within your webpack configuration object, you'll need to add the copy-webpack-plugin to the list of plugins, like so:

const path = require("path");
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
  plugins: [
    new CopyWebpackPlugin([
      {
        // Provide your node_modules path where @chartshq/muze
        // package is installed.
        from: path.resolve("<your_node_modules_path>", "@chartshq/muze/dist"),
        to: '.'
      },
    ]),
  ]
}

You also can checkout our muze-app-template to try out the Muze quickly through a boilerplate app.

Getting Started

Once the installation is done, please follow the steps below:

  1. Prepare the data and the corresponding schema:
// Prepare the schema for data.
const schema = [
  {
    name: 'Name',
    type: 'dimension'
  },
  {
    name: 'Maker',
    type: 'dimension'
  },
  {
    name: 'Horsepower',
    type: 'measure',
    defAggFn: 'avg'
  },
  {
    name: 'Origin',
    type: 'dimension'
  }
]

// Prepare the data.
const data = [
   {
    "Name": "chevrolet chevelle malibu",
    "Maker": "chevrolet",
    "Horsepower": 130,
    "Origin": "USA"
  },
  {
    "Name": "buick skylark 320",
    "Maker": "buick",
    "Horsepower": 165,
    "Origin": "USA"
  },
  {
    "Name": "datsun pl510",
    "Maker": "datsun",
    "Horsepower": 88,
    "Origin": "Japan"
  }
]
  1. Import muze as follows:

If you are using the npm package, import the package and its CSS file.

import muze from '@chartshq/muze';
import "@chartshq/muze/dist/muze.css";

If you are using CDN, use it as follows:

const muze = window.muze;
  1. Create a DataModel and a basic chart:
// As the muze and DataModel are asynchronous, so we need to
// use async-await syntax.
async function myAsyncFn() {
  // Load the DataModel module.
  const DataModel = await muze.DataModel.onReady();
  
  // Converts the raw data into a format
  // which DataModel can consume.
  const formattedData = await DataModel.loadData(data, schema);

  // Create a new DataModel instance with
  // the formatted data.
  let dm = new DataModel(formattedData);
  
  // Create a global environment to share common configs across charts.
  const env = await muze();
 
  // Create a new canvas instance from the global
  // environment to render chart on.
  const canvas = env.canvas();

  canvas
  .data(dm) // Set data to the chart.
  .rows(["Horsepower"]) // Fields drawn on Y axis.
  .columns(["Origin"]) // Fields drawn on X axis.
  .mount("#chart"); // Specify an element to mount on using a CSS selector.
}

myAsyncFn()
  .catch(console.error.bind(console));

Documentation

You can find detailed tutorials, concepts and API references at our Documentation.

What has changed?

Muze 2.0.0 is now powered by WebAssembly bringing in huge performance improvement over the previous versions. The JavaScript version has been deprecated and no active development will take place in that version - but we'll fix critical bugs as and when raised in GitHub.

This version of Muze brings in power of WebAssembly for handling large datasets with ease, along with frictionless interaction and rendering. In addition, the data loading part in WebAssembly version is asynchronous, as opposed to being synchronous in the JavaScript version. Further, the WebAssembly version is free but only available as a compiled binary, whereas the JavaScript version is free and open-source (MIT).

You can visit the deprecated JavaScript version here https://github.com/chartshq/muze-deprecated

Migrating from previous versions of Muze

Now the Muze became asynchronous as opposed to being synchronous in the previous JavaScript version.

Changed APIs

  • Creating Env

    Muze deprecated version:

    const env = muze();
    const canvas = env.canvas();

    Latest version:

    (async function () {
      const env = await muze();
      const canvas = env.canvas();
    })();
  • dispatchBehaviour

    Muze deprecated version:

    canvas.firebolt().dispatchBehaviour('highlight', {
      criteria: {
        Maker: ['ford']
      }
    });

    Latest version :

    In the current version, the identifiers needs to be passed in dimensions object or range object if it is measure or temporal field.

    // Dispatch highlight behaviour on data plots having maker as ford
    canvas.firebolt().dispatchBehaviour('highlight', {
      criteria: {
        dimensions: {
          Maker: ['ford']
        }
      }
    });
    
    // Dispatch highlight behaviour on data plots having Acceleration
    // between 20 and 50.
    canvas.firebolt().dispatchBehaviour('highlight', {
      criteria: {
        range: {
          Acceleration: [20, 50]
        }
      }
    });

Support

Please raise a Github issue here.

Roadmap

Please contribute to our public wishlist or upvote an existing feature at Muze Public Wishlist & Roadmap.

License

Custom License (Free to use)

Comments
  • Uncaught TypeError: v is not a function on bar hover without any tooltip config

    Uncaught TypeError: v is not a function on bar hover without any tooltip config

    Do you want to request a feature or report a bug? Bug

    What is the current behavior? Console.errors with Uncaught TypeError: v is not a function when you hover over a bar in a bar chart without any tooltip config.

    What is the expected behavior? No errors

    Which versions of MuzeJS, and which browser/OS are affected by this issue? Did this work in previous versions of MuzeJS? 1.0.3 Chrome

    bug 
    opened by swapsCAPS 6
  • Simple number display and table on canvas.

    Simple number display and table on canvas.

    Hello,

    is it currently possible to render a simple number display for example to present a KPI? If we take the car dataset imagine creating a dashboards with multiple visuals. I want to display a measure at the top with title "Cars with more than 50 Horsepower: 67". It would be nice if this box which just displays the number also allows interactivity so that when you click on the 67 all charts e.g. "Cars by Origin Barchart" now show only this subset.

    Can I do that with a text layer? Similarly would this number display work in a pivot table like in the crosstab example: https://www.charts.com/muze/examples/view/microcharts-in-table-using-crosstab

    I was able to remove the bars in each cell, but now I have no elements to click on. If that is not the case I would open the feature request in the feedback.

    Thanks!

    Tim

    enhancement 
    opened by timjp87 5
  • Using tickFormat in axes configuration breaks rendering of temporal field

    Using tickFormat in axes configuration breaks rendering of temporal field

    Do you want to request a feature or report a bug?

    • bug

    What is the current behavior? If the tick format config for axes is used to change the appearance of numeric fields, the rendering of temporal fields breaks and shows the complete JS Date string.

    Before changing tickFormat the temporal axis shows properly and the y-axis shows numbers as is. image

    After changing the tickFormat to render numbers as a local string (ex 10000 becomes 10,000) date time values are rendered as date strings. image

    The tickFormat configuration is as follows: axes: { x: { tickFormat: (value) => { if (typeof value === 'number') { return new Intl.NumberFormat().format(value); } return value; }, }, y: { tickFormat: (value) => { if (typeof value === 'number') { return new Intl.NumberFormat().format(value); } return value; }, }, }, You can see the behaviour in this fiddle.

    https://jsfiddle.net/kv8g1q92/

    What is the expected behavior? Date strings should not be broken by specifying tick format.

    Which versions of MuzeJS, and which browser/OS are affected by this issue? Did this work in previous versions of MuzeJS?

    • latest
    bug 
    opened by sushrut141 4
  • Trustworthy - Reliable - to be or not to be?

    Trustworthy - Reliable - to be or not to be?

    Hey out there from @chartshq-eng

    First of all - thanks for opening this cool tool and library for free usage to all! That is great stuff.

    But let's move on to concerns ...

    In times where are a lot of trojans, viruses and others are out in the wild - it is very important to be "trustworthy" - especially when developing software for customers and deploying that to a number of clients. For that kind IMHO there is nothing else than "Open Source" (see what you get).

    Now I ask myself how to thrust a WebAssembly which is not allowed to get reverse engineerd by license but free to use. How to trust that piece of "closed" code.

    I am looking forward to your answer - how to solve that.

    Cheers, Tom

    opened by TomFreudenberg 3
  • Datamodel Sort broken in 1.3.1

    Datamodel Sort broken in 1.3.1

    Do you want to request a feature or report a bug? Reporting a bug.

    What is the current behavior? Using data model sort function used to work in version 1.2.1 but is broken in version 1.3.1.

    If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code. You can either a scale down sample, JSFiddle or JSBin link

    What is the expected behavior? A bar chart with sorting enabled (e.g. percentage) should sort the columns according to a dimension:

                let dm = new DataModel(data, schema);
                dm = dm.sort([
                  ['percentage', 'ASC'],
                ]);
    

    Now regardless the way we specify, it disregard the sort.

    Screen Shot 2020-02-12 at 16 26 49

    Which versions of MuzeJS, and which browser/OS are affected by this issue? Did this work in previous versions of MuzeJS? Muze 1.3.1, macOS 10.15.3, Chrome 79.0.3945.130

    bug 
    opened by rodmaz 3
  • Feature/#34 legend item texts not aligned

    Feature/#34 legend item texts not aligned

    Issues Fixed 1.) fixed the text alignment issue with the legend title when the width of legend labels is greater than the container width. 2.) fixed the title overflowing issue, if the length of the title is longer than the width of the container or if the title is multi-word. 3.) Fixed the legend item text alignment issue, now legend texts are coming in a single line. 4.) Legend item text alignment issue in size encoding fixed.

    opened by sanjaymahto 3
  • Sorting a groupedBy DataModel does not render in a chart

    Sorting a groupedBy DataModel does not render in a chart

    Do you want to request a feature or report a bug? Bug

    What is the current behavior? Sorting a groupedBy DataModel does not work. screenshot

    Example

    import _    from "underscore"
    import m    from "moment"
    import muze from "muze"
    
    { DataModel }     = muze
    { groupBy, sort } = DataModel.Operators
    
    schema = [
    	{
    		name:     "total"
    		type:     "measure"
    		defAggFn: "avg"
    	}
    	{
    		name:    "start"
    		type:    "dimension"
    		subtype: "temporal"
    	}
    	{
    		name:    "day"
    		type:    "dimension"
    		subtype: "datetime"
    		format:  "%d"
    	}
    ]
    
    data = [
    	{ total: 5, start: m().subtract(1, "days") }
    	{ total: 4, start: m().subtract(4, "days") }
    	{ total: 9, start: m().subtract(1, "days") }
    	{ total: 1, start: m().subtract(4, "days") }
    	{ total: 8, start: m().subtract(3, "days") }
    	{ total: 6, start: m().subtract(2, "days") }
    	{ total: 2, start: m().subtract(3, "days") }
    	{ total: 3, start: m().subtract(2, "days") }
    ]
    
    data = _.map data, (d) ->
    	_.extend {}, d,
    		start: +d.start
    		day:   m(d.start).format "DD"
    
    # data = _.sortBy data, "day" # Sorting dataset here first gives expected result
    
    groupFn = groupBy ["day"], total: "avg"
    sortFn  = sort    [ "day", "ASC" ]
    
    dm = new DataModel data, schema
    
    dm = groupFn sortFn dm # Switching these around doesn't work either
    
    canvas
    	.data    dm
    	.width   600
    	.height  450
    	.rows    [ "total" ]
    	.columns [ "day" ]
    	.mount   "#chart-container"
    

    What is the expected behavior? screenshot_deux

    Which versions of MuzeJS, and which browser/OS are affected by this issue? Did this work in previous versions of MuzeJS? 1.0.3 Chrome

    Also is it possible to use the DataModel to group by date range? It's vaguely mentioned in the docs but I couldn't find anything about it. Is adding a key like I do above the correct approach? Cheers!

    bug 
    opened by swapsCAPS 3
  • Legend header and body spacing not appropriate

    Legend header and body spacing not appropriate

    When legend is positioned at bottom, the spacing between header and body is too large which makes the header of legend feel like a part of axis.

    Config

    canvas
        .data(dm)
        .width(600)
        .height(400)
        .rows(['Displacement'])
        .columns(['Horsepower'])
        .color('Origin')
        .detail(['Name'])
        .config({
            legend: {
                position: 'bottom'
            }
        })
        .mount(node) /* Attaching the canvas to DOM element */```
    bug 
    opened by adotg 3
  • tick layer showing stale tick mark after changing datamodel

    tick layer showing stale tick mark after changing datamodel

    Do you want to request a feature or report a bug? bug

    What is the current behavior? After changing the datamodel and selection, the tick mark from the old datamodel is still displayed

    If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code. You can either a scale down sample, JSFiddle or JSBin link

    https://codepen.io/jvert/full/ZEbQvdG

    You will see a bar chart with min/max tick layer and average point layer. X axis is dates from Apr 6-15. The rightmost bar is selected and at the bottom you will see the corresponding date April 15 2020. Clicking different bars will single-select that bar and change the date at the bottom.

    Now press the "switch" button. This will load a new dataset with dates from Mar 27-Apr 5 and the chart will animate to represent the new data. BUT there is one stale tick mark on Mar 31 which is leftover from the original dataset. You can hover or select Mar 31 and see that the min/max is 0, but the tick is still displaying 1-5 from the first dataset.

    What is the expected behavior?

    Tick mark displayed on Mar 31 is 0-0 to match the data.

    Which versions of MuzeJS, and which browser/OS are affected by this issue? Did this work in previous versions of MuzeJS?

    Reproduced on FireFox 75.0 and Chrome 80.0.3987.163 on Win10.

    I realize this sample is a bit convoluted. Let me explain the effect I am trying to achieve.

    Dates (by day) across the x-axis displaying a bar chart with a Count value and a tick chart displaying Min/Max/Avg data. The rightmost bar should be selected by default and the text outside the graph should display the selected date/min/max/avg data as text. I also want the single select behavior (only one date at a time can be selected) so I started from the SingleSelectBehaviour example in the documentation (under RegisterBehaviours)

    There is probably a simpler way to get the behaviour I want but this is my first time using Muze and all the behavior/side effect/firebolt action stuff is pretty hard to figure out. Right now I have everything working except the weird stray tick mark which has been driving me crazy!

    opened by jvert 2
  • Bump eslint from 3.19.0 to 4.18.2

    Bump eslint from 3.19.0 to 4.18.2

    Bumps eslint from 3.19.0 to 4.18.2.

    Release notes

    Sourced from eslint's releases.

    v4.18.2

    • 6b71fd0 Fix: [email protected], because 4.0.3 needs "ajv": "^6.0.1" (#10022) (Mathieu Seiler)
    • 3c697de Chore: fix incorrect comment about linter.verify return value (#10030) (Teddy Katz)
    • 9df8653 Chore: refactor parser-loading out of linter.verify (#10028) (Teddy Katz)
    • f6901d0 Fix: remove catastrophic backtracking vulnerability (fixes #10002) (#10019) (Jamie Davis)
    • e4f52ce Chore: Simplify dataflow in linter.verify (#10020) (Teddy Katz)
    • 33177cd Chore: make library files non-executable (#10021) (Teddy Katz)
    • 558ccba Chore: refactor directive comment processing (#10007) (Teddy Katz)
    • 18e15d9 Chore: avoid useless catch clauses that just rethrow errors (#10010) (Teddy Katz)
    • a1c3759 Chore: refactor populating configs with defaults in linter (#10006) (Teddy Katz)
    • aea07dc Fix: Make max-len ignoreStrings ignore JSXText (fixes #9954) (#9985) (Rachael Sim)

    v4.18.1

    • f417506 Fix: ensure no-await-in-loop reports the correct node (fixes #9992) (#9993) (Teddy Katz)
    • 3e99363 Docs: Fixed typo in key-spacing rule doc (#9987) (Jaid)
    • 7c2cd70 Docs: deprecate experimentalObjectRestSpread (#9986) (Toru Nagashima)

    v4.18.0

    • 70f22f3 Chore: Apply memoization to config creation within glob utils (#9944) (Kenton Jacobsen)
    • 0e4ae22 Update: fix indent bug with binary operators/ignoredNodes (fixes #9882) (#9951) (Teddy Katz)
    • 47ac478 Update: add named imports and exports for object-curly-newline (#9876) (Nicholas Chua)
    • e8efdd0 Fix: support Rest/Spread Properties (fixes #9885) (#9943) (Toru Nagashima)
    • f012b8c Fix: support Async iteration (fixes #9891) (#9957) (Toru Nagashima)
    • 74fa253 Docs: Clarify no-mixed-operators options (fixes #9962) (#9964) (Ivan Hayes)
    • 426868f Docs: clean up key-spacing docs (fixes #9900) (#9963) (Abid Uzair)
    • 4a6f22e Update: support eslint-disable-* block comments (fixes #8781) (#9745) (Erin)
    • 777283b Docs: Propose fix typo for function (#9965) (John Eismeier)
    • bf3d494 Docs: Fix typo in max-len ignorePattern example. (#9956) (Tim Martin)
    • d64fbb4 Docs: fix typo in prefer-destructuring.md example (#9930) (Vse Mozhet Byt)
    • f8d343f Chore: Fix default issue template (#9946) (Kai Cataldo)

    v4.17.0

    • 1da1ada Update: Add "multiline" type to padding-line-between-statements (#8668) (Matthew Bennett)
    • bb213dc Chore: Use messageIds in some of the core rules (#9648) (Jed Fox)
    • 1aa1970 Docs: remove outdated rule naming convention (#9925) (Teddy Katz)
    • 3afaff6 Docs: Add prefer-destructuring variable reassignment example (#9873) (LePirlouit)
    • d20f6b4 Fix: Typo in error message when running npm (#9866) (Maciej Kasprzyk)
    • 51ec6a7 Docs: Use GitHub Multiple PR/Issue templates (#9911) (Kai Cataldo)
    • dc80487 Update: space-unary-ops uses astUtils.canTokensBeAdjacent (fixes #9907) (#9906) (Kevin Partington)
    • 084351b Docs: Fix the messageId example (fixes #9889) (#9892) (Jed Fox)
    • 9cbb487 Docs: Mention the globals key in the no-undef docs (#9867) (Dan Dascalescu)

    v4.16.0

    • e26a25f Update: allow continue instead of if wrap in guard-for-in (fixes #7567) (#9796) (Michael Ficarra)
    • af043eb Update: Add NewExpression support to comma-style (#9591) (Frazer McLean)
    • 4f898c7 Build: Fix JSDoc syntax errors (#9813) (Matija MarohniΔ‡)
    • 13bcf3c Fix: Removing curly quotes in no-eq-null report message (#9852) (Kevin Partington)
    • b96fb31 Docs: configuration hierarchy for CLIEngine options (fixes #9526) (#9855) (PiIsFour)
    • 8ccbdda Docs: Clarify that -c configs merge with .eslintrc.* (fixes #9535) (#9847) (Kevin Partington)
    • 978574f Docs: Fix examples for no-useless-escape (#9853) (Toru Kobayashi)
    ... (truncated)
    Changelog

    Sourced from eslint's changelog.

    v4.18.2 - March 2, 2018

    • 6b71fd0 Fix: [email protected], because 4.0.3 needs "ajv": "^6.0.1" (#10022) (Mathieu Seiler)
    • 3c697de Chore: fix incorrect comment about linter.verify return value (#10030) (Teddy Katz)
    • 9df8653 Chore: refactor parser-loading out of linter.verify (#10028) (Teddy Katz)
    • f6901d0 Fix: remove catastrophic backtracking vulnerability (fixes #10002) (#10019) (Jamie Davis)
    • e4f52ce Chore: Simplify dataflow in linter.verify (#10020) (Teddy Katz)
    • 33177cd Chore: make library files non-executable (#10021) (Teddy Katz)
    • 558ccba Chore: refactor directive comment processing (#10007) (Teddy Katz)
    • 18e15d9 Chore: avoid useless catch clauses that just rethrow errors (#10010) (Teddy Katz)
    • a1c3759 Chore: refactor populating configs with defaults in linter (#10006) (Teddy Katz)
    • aea07dc Fix: Make max-len ignoreStrings ignore JSXText (fixes #9954) (#9985) (Rachael Sim)

    v4.18.1 - February 20, 2018

    • f417506 Fix: ensure no-await-in-loop reports the correct node (fixes #9992) (#9993) (Teddy Katz)
    • 3e99363 Docs: Fixed typo in key-spacing rule doc (#9987) (Jaid)
    • 7c2cd70 Docs: deprecate experimentalObjectRestSpread (#9986) (Toru Nagashima)

    v4.18.0 - February 16, 2018

    • 70f22f3 Chore: Apply memoization to config creation within glob utils (#9944) (Kenton Jacobsen)
    • 0e4ae22 Update: fix indent bug with binary operators/ignoredNodes (fixes #9882) (#9951) (Teddy Katz)
    • 47ac478 Update: add named imports and exports for object-curly-newline (#9876) (Nicholas Chua)
    • e8efdd0 Fix: support Rest/Spread Properties (fixes #9885) (#9943) (Toru Nagashima)
    • f012b8c Fix: support Async iteration (fixes #9891) (#9957) (Toru Nagashima)
    • 74fa253 Docs: Clarify no-mixed-operators options (fixes #9962) (#9964) (Ivan Hayes)
    • 426868f Docs: clean up key-spacing docs (fixes #9900) (#9963) (Abid Uzair)
    • 4a6f22e Update: support eslint-disable-* block comments (fixes #8781) (#9745) (Erin)
    • 777283b Docs: Propose fix typo for function (#9965) (John Eismeier)
    • bf3d494 Docs: Fix typo in max-len ignorePattern example. (#9956) (Tim Martin)
    • d64fbb4 Docs: fix typo in prefer-destructuring.md example (#9930) (Vse Mozhet Byt)
    • f8d343f Chore: Fix default issue template (#9946) (Kai Cataldo)

    v4.17.0 - February 2, 2018

    • 1da1ada Update: Add "multiline" type to padding-line-between-statements (#8668) (Matthew Bennett)
    • bb213dc Chore: Use messageIds in some of the core rules (#9648) (Jed Fox)
    • 1aa1970 Docs: remove outdated rule naming convention (#9925) (Teddy Katz)
    • 3afaff6 Docs: Add prefer-destructuring variable reassignment example (#9873) (LePirlouit)
    • d20f6b4 Fix: Typo in error message when running npm (#9866) (Maciej Kasprzyk)
    • 51ec6a7 Docs: Use GitHub Multiple PR/Issue templates (#9911) (Kai Cataldo)
    • dc80487 Update: space-unary-ops uses astUtils.canTokensBeAdjacent (fixes #9907) (#9906) (Kevin Partington)
    • 084351b Docs: Fix the messageId example (fixes #9889) (#9892) (Jed Fox)
    • 9cbb487 Docs: Mention the globals key in the no-undef docs (#9867) (Dan Dascalescu)

    v4.16.0 - January 19, 2018

    • e26a25f Update: allow continue instead of if wrap in guard-for-in (fixes #7567) (#9796) (Michael Ficarra)
    • af043eb Update: Add NewExpression support to comma-style (#9591) (Frazer McLean)
    ... (truncated)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 2
  • Ordering of fields in crosstab is random

    Ordering of fields in crosstab is random

    Do you want to request a feature or report a bug?

    • bug

    What is the current behavior? I'm plotting a crosstab of Year, Origin vs Horsepower using the cars dataset. After grouping by Year the origins pane shows the origins arranged randomly in each section.

    image

    What is the expected behavior? Ideally the arrangement of fields in crosstab should be consistent.

    Which versions of MuzeJS, and which browser/OS are affected by this issue? Did this work in previous versions of MuzeJS?

    • latest
    bug 
    opened by sushrut141 2
  • create-react-app application throws webassembly error after page refresh

    create-react-app application throws webassembly error after page refresh

    I have a react application generated by create-react-app. I have followed the instructions on how to integrate muze js in react app from the official documentation. I have used craco to override webpack copyplugin. When I start my application it generates the muze chart. but when I refresh the page, It throws an uncaught webassembly error. image

    Here is the craco config file content:

    const CopyWebpackPlugin = require('copy-webpack-plugin');
    const path = require('path');
    module.exports = {
      style: {
        postcss: {
          plugins: [
            require('tailwindcss'),
            require('autoprefixer'),
          ],
        },
      },
      webpack: {
        plugins: [
          new CopyWebpackPlugin([
            {
              from: path.resolve("node_modules", "@chartshq/muze/dist"),
              to: '.'
            },
          ])
        ]
      }
    }
    

    Also, I have noticed that after integrating muze js, tailwindcss is not working properly. Can anyone point me where is the problem. From my guess the copyWebPlugin seems not working after page refresh.

    opened by ahashans 0
  • Stack/Group by more than 1 dimension or measure

    Stack/Group by more than 1 dimension or measure

    Hi guys,

    I'm checking Muze to integrate it with cube js REST API and it looks awesome so far.

    The only thing I can't figure out is how to create charts stacked or grouped by more than 1 dimension or measure. All the examples I have seen so far group or stack by one single property (color)

    This is a very important use case for us. For example:

    measure 1: water from rain measure 2: water from sea

    We would like to display a bar that stacks both measures and total is the sum of both.

    Is this possible?

    Thanks

    opened by javichi 1
  • Give width and height in Getting Started code in README.md

    Give width and height in Getting Started code in README.md

    Use width and height in Getting started code in Readme.md file as follows:

      canvas
      .data(dm) // Set data to the chart.
      .rows(["Horsepower"]) // Fields drawn on Y axis.
      .columns(["Origin"]) // Fields drawn on X axis.
      .width(600)
      .height(700)
      .mount("#chart"); // Specify an element to mount on using a CSS selector.
    
    bug 
    opened by rousan 0
Owner
Charts.com
Data is meaningless without the ability to visualize, consume & act on it. We build libraries & tools to achieve this goal.
Charts.com
Free Bootstrap 5 Admin and Dashboard Template that comes with all essential dashboard components, elements, charts, graph and application pages. Download now for free and use with personal or commercial projects.

PlainAdmin - Free Bootstrap 5 Dashboard Template PlainAdmin is a free and open-source Bootstrap 5 admin and dashboard template that comes with - all e

PlainAdmin 238 Dec 31, 2022
3D graph viewer powered by WebGL (three.js)

Graphosaurus A three-dimensional static graph viewer. (click the image to try it out) Demos EVE Online map Add nodes incrementally Documentation JSDoc

Corey Farwell 362 Dec 4, 2022
A r/place clone powered by websockets

canvas A r/place clone powered by websockets That's pretty much it. https://canvas.rto.run To build, run npm install and then node main.js to start th

Chunkybanana 9 Oct 19, 2022
Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.

Redash is designed to enable anyone, regardless of the level of technical sophistication, to harness the power of data big and small. SQL users levera

Redash 22.4k Dec 30, 2022
D3 (or D3.js) is a JavaScript library for visualizing data using web standards

D3 (or D3.js) is a JavaScript library for visualizing data using web standards. D3 helps you bring data to life using SVG, Canvas and HTML. D3 combines powerful visualization and interaction techniques with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers and the freedom to design the right visual interface for your data.

D3 103.8k Jan 5, 2023
danfo.js is an open source, JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.

Danfojs: powerful javascript data analysis toolkit What is it? Danfo.js is a javascript package that provides fast, flexible, and expressive data stru

JSdata 4k Dec 29, 2022
Globe.GL - A web component to represent data visualization layers on a 3-dimensional globe in a spherical projection

A web component to represent data visualization layers on a 3-dimensional globe in a spherical projection. This library is a convenience wrap

Vasco Asturiano 1.3k Jan 3, 2023
Apache Superset is a Data Visualization and Data Exploration Platform

Superset A modern, enterprise-ready business intelligence web application. Why Superset? | Supported Databases | Installation and Configuration | Rele

The Apache Software Foundation 49.9k Dec 31, 2022
DataSphereStudio is a one stop data application development& management portal, covering scenarios including data exchange, desensitization/cleansing, analysis/mining, quality measurement, visualization, and task scheduling.

English | δΈ­ζ–‡ Introduction DataSphere Studio (DSS for short) is WeDataSphere, a big data platform of WeBank, a self-developed one-stop data application

WeBankFinTech 2.4k Jan 2, 2023
API to generate candlestick chart data for any time period based on transactions data

candel-maker API to generate candlestick chart data for any time period based on transactions data Installation clone repo git clone https://github.co

null 2 Aug 18, 2022
a graph visualization library using web workers and jQuery

arbor.js -------- Arbor is a graph visualization library built with web workers and jQuery. Rather than trying to be an all-encompassing framework, a

Christian Swinehart 2.6k Dec 19, 2022
Apache ECharts is a powerful, interactive charting and data visualization library for browser

Apache ECharts Apache ECharts is a free, powerful charting and visualization library offering an easy way of adding intuitive, interactive, and highly

The Apache Software Foundation 53.8k Jan 9, 2023
A library optimized for concise and principled data graphics and layouts.

MetricsGraphics is a library built for visualizing and laying out time-series data. At around 15kB (gzipped), it provides a simple way to produce comm

Metrics Graphics 7.5k Dec 22, 2022
Data visualization library for depicting quantities as animated liquid blobs

liquidity.js A data visualization library for depicting quantities as animated liquid blobs. For a demonstration of what the final product can look li

N Halloran 91 Sep 20, 2022
Powerful data visualization library based on G2 and React.

BizCharts New charting and visualization library has been released: http://bizcharts.net/products/bizCharts. More details about BizCharts Features Rea

Alibaba 6k Jan 3, 2023
🌏 A Declarative 3D Globe Data Visualization Library built with Three.js

Gio.js English | δΈ­ζ–‡ React Version: react-giojs Wechat minigame: wechat usage Gio.js is an open source library for web 3D globe data visualization buil

syt123450 1.6k Dec 29, 2022
πŸ“Š Data visualization library for React based on D3

Data visualization library for React based on D3js REAVIZ is a modular chart component library that leverages React natively for rendering the compone

REAVIZ 740 Dec 31, 2022
A library optimized for concise and principled data graphics and layouts.

MetricsGraphics is a library built for visualizing and laying out time-series data. At around 15kB (gzipped), it provides a simple way to produce comm

Metrics Graphics 7.5k Dec 22, 2022
Apache ECharts is a powerful, interactive charting and data visualization library for browser

Apache ECharts Apache ECharts is a free, powerful charting and visualization library offering an easy way of adding intuitive, interactive, and highly

The Apache Software Foundation 53.8k Jan 5, 2023