npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

svgchrtjs

v0.2.8

Published

A way to easily create SVG-based charts without having to worry about positioning of titles, subtitles or legends. Now maintained under the shorter name svgchrt

Downloads

33

Readme

SVGChrt

npm npm GitHub top language GitHub code size in bytes NPM

The easiest way to put together a data visualisation in SVG.

Installation

npm install svgchrt

<script src="https://unpkg.com/svgchrt"></script>

Usage

const SVGChrt = require('svgchrt');

const data = []; // Your dataset
const options = {}; // How you want the visualisation to look

const Chart = SVGChrt.SVGChrt(data,options);

Chart.plot = function() {
  /* Remember, this only provides an area
  *  to display your visualisation without
  *  having it clash with titles, subtitles
  *  or your legend. It also easily generates
  *  the legend for you. The flipside of this
  *  is that this then allows you to do
  *  whatever you want with your plot and use
  *  whichever library you see fit.
  */
};

Chart.render();

Reference

Available options:

  1. background (boolean), default: true

    Decides whether or not to give your chart a background to make it stand out from the page. If set to true it will provide a <rect> element with the class of chart-background for styling with CSS, and its height and width attributes will match those of the parent <svg>.

  2. canvas (object)

    Contains 4 items:

    1. height (integer), default: 500

      Determines the height of your visualisation in pixels.

    2. padding (object)

      Contains 4 items: top, right, bottom and left, each of which defaults to 10 and provides an inner padding so that your visualisation is not squashed up to the edge of the SVG.

    3. viewBox (string), default: '0 0 960 500'

      Determines the viewBox of your <svg> and should usually match 0 0 width height.

    4. width (integer), default: 960

      Determines the width of your visualisation in pixels.

  3. chart (object)

    Contains 1 item:

    1. margin (object)

      Contains 4 items: top, right, bottom and left, each of which defaults to 10 and provides a margin around your visualisation so that it can be visually separate from the rest of the elements.

  4. description (string), default: ''

    Provides a description of your visualisation to assistive technologies such as screen readers.

  5. id (string), defaut: ''

    Adds an ID to the parent SVG. Please include an ID

  6. legend (object)

    Contains 12 items:

    1. background (object)

      Contains 1 item:

      1. display (boolean), default: false

        Decides whether or not to add a background to the legend. If it is set to true it will add a <rect> element with the class legend-background for styling with CSS.

      2. displaceTitle (boolean), default: false

        Decides whether the placement of the legend should have an effect on the positioning of the title and subtitle. If it set to true then if options.legend.position is set to top-left, left, bottom-left, top-right, right or bottom-right and the options.legend.orientation is set to vertical then the title and subtitle will shift (and possibly wrap) into their new smaller container.

        If options.legend.position is set to top or bottom or options.legend.orientation is set to horizontal then this option is ignored.

      3. display (boolean), default: false

        Decides whether or not to display the legend.

      4. icons (object)

        Provides a default for the icons contained in each legend item.

        Contains 4 items:

        1. display (boolean), default: false

          Determines whether to display an icon.

        2. height (integer), default: 14

          Determines the height of the icons in pixels.

          N.B. The height property is only applicable to certain SVG elements, in this case the shape beneath this defaults to rect which takes a height property.

        3. shape (string), default: 'rect'

          Determines the shape that the icons should take.

        4. width (integer), default: 14

          Determines the width of the icons in pixels.

          N.B. The width property is only applicable to certain SVG elements, in this case the shape above this defaults to rect which takes a width property.

      5. itemMargin (object)

        Contains 4 items: top, right, bottom and left, each of which defaults to 10 and provides a margin between each legend item to allow them to be visually separate from each other.

      6. items (array), default: []

        An array of objects to be displayed on the legend. Each object must contain a displayName property which contains the text that will be displayed, this can either be a string or a function that returns a string. You may also want to include a class property to style the icons differently (different fill colours for example) with CSS.

        You can also include an icon property as an object, if you want to overwrite your default icon options set above.

        As you may be pulling in your legend items from a dataset containing many more properties, the library will simply ignore any additional properties.

        If this array is empty then the legend will not display.

      7. layOverChart (boolean), default: false

        Decides whether the legend should be displayed on top of the visualisation or resize the visualisation to fit.

      8. margin (object)

        Contains 4 items: top, right, bottom and left, each of which defaults to 10 and provides a margin around your legend so that it can be visually separate from the rest of the elements.

      9. orientation (string), default: 'vertical'

        Decides whether your legend items should stack vertically on top of one another or horizontally next to each other.

      10. padding (object)

        Contains 4 items: top, right, bottom and left, each of which defaults to 0 and provides an inner padding so that your items are not squashed up to the edge of the legend's background.

        They default to 0 as a padding is only really recommended if you set options.legend.background.display to true.

      11. position (string), default: 'right'

        Provides 8 options: top-left, top, top-right, right, bottom-right, bottom, bottom-left, left and decides where the legend should be on your SVG.

      12. title (string), default: ''

        Future update

        Adds a title to the legend and provides a <text> element with the class legend-title for styling with CSS.

  7. subtitle (object)

    Contains 3 items:

    1. display (boolean), default: false

      Determines whether to display a subtitle on the chart, if it is set to true and options.subtitle.text is not an empty string, it will provide a <text> element with the class of chart-subtitle for styling with CSS. Other attributes will be dy="1em", text-anchor="middle" and x and y which the library will calculate. Should the subtitle be too long to fit onto a single line, the <text> element will contain 2 or more <tspan> elements.

    2. margin (object)

      Contains 4 items: top, right, bottom and left, each of which defaults to 10 and provides a margin around your subtitle so that it can be visually separate from the rest of the elements.

    3. text (string), default: ''

      Contains the text to display as the subtitle, if it is not an empty string and options.subtitle.display is set to true, it will provide a <text> element with the class of chart-subtitle for styling with CSS. Other attributes will be dy="1em", text-anchor="middle" and x and y which the library will calculate. Should the subtitle be too long to fit onto a single line, the <text> element will contain 2 or more <tspan> elements.

  8. target (string), default: '' REQUIRED

    Targets the container <div> or <section> where your visualisation is to be displayed. Will throw an error is either left blank or the target element does not exist.

    Can target either an element's ID or its querySelector.

  9. title (object)

    Please include a title

    Contains 3 items:

    1. display (boolean), default: false

      Determines whether to display a title on the chart, if it is set to true and options.title.text is not an empty string, it will provide a <text> element with the class of chart-title for styling with CSS. Other attributes will be dy="1em", text-anchor="middle" and x and y which the library will calculate. Should the title be too long to fit onto a single line, the <text> element will contain 2 or more <tspan> elements.

    2. margin (object)

      Contains 4 items: top, right, bottom and left, each of which defaults to 10 and provides a margin around your subtitle so that it can be visually separate from the rest of the elements.

    3. text (string), default: ''

      Contains the text to display as the title, if it is not an empty string and options.title.display is set to true, it will provide a <text> element with the class of chart-title for styling with CSS. Other attributes will be dy="1em", text-anchor="middle" and x and y which the library will calculate. Should the title be too long to fit onto a single line, the <text> element will contain 2 or more <tspan> elements.

      If it is not an empty string then, regardless of whether options.title.display is true, it will add a <title> element to your SVG to allow assistvie technologies such as screenreaders to see it.