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

r-chart

v7.7.0

Published

chart component written by react js,support line charts and bar charts,resposive,zoomable,editable,dragable

Downloads

66

Readme

r-chart (react editable line chart and bar chart)

alt text alt text

description

  • developed by reactjs.
  • create line chart , bar chart and both in one container.
  • editable points By drag or popup.
  • add point on chart abilty.
  • remove point on chart ability.
  • high performance.
  • mobile support(support touch events).
  • responsive.
  • customizable style.
  • zoomable.
  • up to 500000 point support.
  • multi select points

Instalation

npm i r-chart

Usage

import react from "react";
import Chart from "r-chart";
<Chart />

end of preview

Code:
import React,{Component,Fragment} from "react";
import Chart from './r-chart'
import './style.css';
export default class App extends Component{
    state = {
        targets:[
            {date:'January',amount:10,size:8},
            {date:'February',amount:30},
            {date:'March',amount:20},
            {date:'May',amount:15},
            {date:'July',amount:50},
            {date:'August',amount:55},
            {date:'September',amount:40},
            {date:'October',amount:20},
            {date:'November',amount:40},
            {date:'December',amount:50},
        ],
        sales:[
            {date:'January',amount:0},
            {date:'February',amount:20},
            {date:'March',amount:40},
            {date:'April',amount:40},
            {date:'May',amount:45},
            {date:'June',amount:30},
            {date:'July',amount:10}
        ],
        logs:[]
    }
    change({point,key,value,dataIndex,pointIndex,drag}){
        var {targets,sales,logs} = this.state;
        if(dataIndex === 0){
            targets[pointIndex].amount = value;
            if(!drag){//drag end
                logs.push(`You changed this.state.targets[${pointIndex}].amount to ${value}`);
            }
            this.setState({targets,logs})    
        }
        else if(dataIndex === 1){
            sales[pointIndex].amount = value;
            if(!drag){//drag end
                logs.push(`You changed this.state.saled[${pointIndex}].amount to ${value}`);
            }
            this.setState({sales,logs})   
        }
    }
    add({key,value,dataIndex,pointIndex}){
        var {logs} = this.state;
        var newPoint = {date:key,amount:value};
        if(dataIndex === 0){
            let {targets} = this.state;
            targets.splice(pointIndex,0,newPoint); 
            logs.push(`You added ${JSON.stringify(newPoint)} to this.state.targets`)
            this.setState({targets,logs})
        }
        else if(dataIndex === 1){
            let {sales} = this.state;
            sales.splice(pointIndex,0,{date:key,amount:value}); 
            logs.push(`You added ${JSON.stringify(newPoint)} to this.state.sales`)
            this.setState({sales,logs})
        }
    }
    remove({point,key,value,dataIndex,pointIndex}){
        var {logs} = this.state;
        if(dataIndex === 0){
            let {targets} = this.state;
            targets.splice(pointIndex,1);
            logs.push(`You removed this.state.targets[${pointIndex}]`);
            this.setState({targets,logs});
        }
        else if(dataIndex === 1){
            let {sales} = this.state;
            sales.splice(pointIndex,1);
            logs.push(`You removed this.state.sales[${pointIndex}]`)
            this.setState({sales,logs});
        }
    }
    render(){
        var {targets,sales,logs} = this.state;
        return (
            <Fragment>
                <h5>Try to drag points or click on points to open popup and edit clicked point (remove or edit)</h5>
                <h5>Try to add point where plus is apear near mouse cursor (you can add point in empty places)</h5>
                <Chart
                    data={[ 
                        {
                            type:'line',
                            color:'#0688f3',
                            getPointStyle:(point)=>{return {radius:5,fill:'blue'}},
                            getPointText:(point)=>{return {value:point.date,y:-20}},
                            title:'Data1',areaOpacity:.1,
                            points:targets
                            getKey={({point})=>point.date}
                            getValue={({point})=>point.amount}
                        },
                        {
                            type:'bar',
                            color:'#03ebcc',
                            title:'Data2',
                            points:sales,
                            getKey={({point})=>point.date}
                            getValue={({point})=>point.amount}
                        },
                    ]} 
                    keyAxis={{
                        edit:(text)=>text.slice(0,3),
                        zoom:true,
                        title:'Date'
                    }}
                    valueAxis={{
                        edit:(value)=>value + '%',
                        gridColor:'#ddd',
                        zoom:true,
                        title:'Amount'
                    }}
                    keys={['January','February','March','April','May','June','July','August','September','October','November','December']}
                    onChange={this.change.bind(this)}
                    onAdd={this.add.bind(this)}
                    onRemove={this.remove.bind(this)}
                />
                <h3>Logs</h3>
                <div className='logs'>
                    <ul>
                        {logs.map((log,i)=><li key={i}>{log}</li>)}
                    </ul>
                </div>
            </Fragment> 
        )
    }
}
Preview(Click image and open demo on stackblitz):

alt text

r-chart consists of a set of data, and each data consists of a set of points.
r-chart have 2 axis (key axis and value axis)
key axis is based on chart keys array
value axis is based on points value
root props

Prop | type | Default | Description --------------- | --------------------------------------------- | ----------------------------------------------- | ---------------------------- data | Array of objects | Required | list of chart data keys | Array of strings or numbers | Required | list of chart keys keyAxis | object | Required | key axis properties valueAxis | object | Required | value axis properties labelSize | number | 40 | set size of horizontal labels labelRotate | number | 0 | angle of labels on horizontal axis onChange | function | Optional | change points value in chart popup or dragging points. onAdd | function | Optional | get point details for add onRemove | function | Optional | get point details for remove html | function | Optional | add custom html on chart(example: add a button on chart)

each data object properties

Property | Type | Default | Description -------------- | ----------------------- | ----------------------------------------------- | ----------- type | string('line' or 'bar') | 'line' | type of chart data title | string | 'untitle' | title of chart data getKey | function | Required | get key from point object getValue | function | Required | get value from point object points | array of objects | required | points of chart data color | string(color) | '#000' | color of chart data dash | array of 2 number(int) | Optional | dash style of line of data lineWidth | number | 2 | line width of line of data area | boolean | false | show line chart area getPointStyle | function | Optional | get point object and returns style of line chart point getPointText | function | Optional | get point object and returns text for render on chart point editable | boolean | true | Specifies whether chart points can be edited or not draggable | boolean | false | Specifies whether chart points can be edited by drag or not

keyAxis properties

Prop | type | Default | Description --------------- | --------------------------------------------- | ----------------------------------------------- | ---------------------------- gridColor | string(color) | Optional | set grid lines on key axis title | string | Required for show in chart popup | title of key axis lines | Array of objects | Optional | set lines by custom style on key axis edit | function | Optional | get each key label and return edited it zoom | boolean | false | set key axis zoomable size | number | 50 | set thickness of key axis

valueAxis properties

Prop | type | Default | Description --------------- | --------------------------------------------- | ----------------------------------------------- | ---------------------------- gridColor | string(color) | Optional | set grid lines on value axis title | string | Required for show in chart popup | title of value axis lines | Array of objects | Optional | set lines by custom style on value axis edit | function | Optional | get each value label and return edited it zoom | boolean | false | set value axis zoomable size | number | 50 | set thickness of key value

onChange props

is a function that get changed point details as a parameter. this parameter type is object and has this properties:

  • dataIndex(index of data of changed point)(number)
  • pointIndex(index of changed point)(number)
  • value(value of point)(number)
  • key(key of point)(string or number)
  • point(object of point)(object)
  • drag(if is true mean this point is changed by drag)(boolean)

Line Chart

Code:
<Chart
    data={[
      {
        type:'line',
        title:'data1',
        color:'blue',
        getKey:(point)=>point.date,
        getValue:(point)=>point.value,
        points:[
          {date:'January',value:10},
          {date:'February',value:15},
          {date:'March',value:25},
          {date:'April',value:30},
          {date:'May',value:40},
          {date:'June',value:35},
          {date:'July',value:40},
          {date:'August',value:60},
          {date:'September',value:60},
          {date:'October',value:75},
          {date:'November',value:80},
          {date:'December',value:100}
        ],

      },
      {
        type:'line',
        title:'data2',
        getKey:(point)=>point.date,
        getValue:(point)=>point.value,
        color:'crimson',
        points:[
          {date:'January',value:20},
          {date:'February',value:35},
          {date:'March',value:15},
          {date:'April',value:40},
          {date:'May',value:60},
          {date:'June',value:55},
          {date:'July',value:50},
          {date:'August',value:70},
          {date:'September',value:65},
          {date:'October',value:85},
          {date:'November',value:90},
          {date:'December',value:100}
        ],
      }
    ]}
    keys={[
      'January','February','March','April','May','June','July','August','September','October','November','December'
    ]}
  />
Preview(Click image and open demo on stackblitz):

alt text

Bar Chart

Code:
<Chart
    data={[
      {
        type:'bar',
        title:'data1',
        color:'blue',
        getKey:(point)=>point.date,
        getValue:(point)=>point.value,
        points:[
          {date:'January',value:10},
          {date:'February',value:15},
          {date:'March',value:25},
          {date:'April',value:30},
          {date:'May',value:40},
          {date:'June',value:35},
          {date:'July',value:40},
          {date:'August',value:60},
          {date:'September',value:60},
          {date:'October',value:75},
          {date:'November',value:80},
          {date:'December',value:100}
        ],

      },
      {
        type:'bar',
        title:'data2',
        getKey:(point)=>point.date,
        getValue:(point)=>point.value,
        color:'crimson',
        points:[
          {date:'January',value:20},
          {date:'February',value:35},
          {date:'March',value:15},
          {date:'April',value:40},
          {date:'May',value:60},
          {date:'June',value:55},
          {date:'July',value:50},
          {date:'August',value:70},
          {date:'September',value:65},
          {date:'October',value:85},
          {date:'November',value:90},
          {date:'December',value:100}
        ],
      }
    ]}
    keys={[
      'January','February','March','April','May','June','July','August','September','October','November','December'
    ]}
  />
Preview(Click image and open demo on stackblitz):

alt text

Line Chart And Bar Chart

Code:
<Chart
    data={[
      {
        type:'bar',
        title:'data1',
        color:'blue',
        getKey:(point)=>point.date,
        getValue:(point)=>point.value,
        points:[
          {date:'January',value:10},
          {date:'February',value:15},
          {date:'March',value:25},
          {date:'April',value:30},
          {date:'May',value:40},
          {date:'June',value:35},
          {date:'July',value:40},
          {date:'August',value:60},
          {date:'September',value:60},
          {date:'October',value:75},
          {date:'November',value:80},
          {date:'December',value:100}
        ],

      },
      {
        type:'line',
        title:'data2',
        getKey:(point)=>point.date,
        getValue:(point)=>point.value,
        color:'crimson',
        points:[
          {date:'January',value:20},
          {date:'February',value:35},
          {date:'March',value:15},
          {date:'April',value:40},
          {date:'May',value:60},
          {date:'June',value:55},
          {date:'July',value:50},
          {date:'August',value:70},
          {date:'September',value:65},
          {date:'October',value:85},
          {date:'November',value:90},
          {date:'December',value:100}
        ],
      }
    ]}
    keys={[
      'January','February','March','April','May','June','July','August','September','October','November','December'
    ]}
  />
Preview(Click image and open demo on stackblitz):

alt text

Label Size

Set width of horizontal axis labels by 'labelSize' prop to prevent those to interference .
Code:
<Chart
  ...
  labelSize={90}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Edit Labels

Set 'edit' function in ketAxis props to edit 'key axis' labels.
Set 'edit' function in valueAxis props to edit 'value axis' labels.
Code:
<Chart
  ...
  keyAxis={{
    ...
    edit:(key)=>key.slice(0,3)
    ...
  }}
  valueAxis={{
    ...
    edit:(value)=>value + '%'
    ...
  }}
  ...
/>`
Preview(Click image and open demo on stackblitz):

alt text

Grid Lines

Set 'key_gridColor' to show and set color of grid lines on key axis.
Set 'value_gridColor' to show and set color of grid lines on value axis.
Code:
<Chart
  ...
  keyAxis={{
    ...
    gridLines:'#ddd'
    ...
  }}
  valueAxis={{
    ...
    gridLines:'#ddd'
    ...
  }}
  ...
/>`
Preview(Click image and open demo on stackblitz):

alt text

Set Multi Data by diffrent styles

Set 3 data on 'data' prop by diffrent styles.
Controlling line chart style by 'dash' , 'lineWidth' , 'color' and 'areaOpacity' property on data
Code:
<Chart
  ...
  data={[
    {
      ...
      title:'data1',
      color:'blue',
      dash:[4,2],
      area:true
      ...
    },
    {
      ...
      title:'data2',
      color:'#03ebcc',
      lineWidth:4,
      ...
    },
    {
      ...
      title:'data3',
      color:'#e414c8',
      dash:[7,5],
    }
  ]}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Get Point Style

Set circle on each points by set 'getPointStyle' function prop on data.
Code:
<Chart
  ...
  data={[
    {
      ...
      pointStyle:{
        radius:5,fill:'blue',stroke:'rgba(0,0,255,.1)',lineWidth:6
      }
      ...
    }
  ]}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Code:
<Chart
  ...
  data={[
    {
      ...
      getPointStyle:(point)=>{
        if(point.date === 'January'){
          return {radius:5,fill:'blue'}
        }
        if(point.date === 'August'){
          return {radius:8,stroke:'red',lineWidth:2,dash:[4,3]}
        }
        else{
          return {radius:5}
        }
      }
      ...
    }
  ]}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Set Lines

Set lines by 'lines' prop width custom style on 'keyAxis' or 'valueAxis' props.
Code:
<Chart
  ...
  keyAxis={
    ...
    lines:[
        {key:'June',dash:[2,2],color:'red',lineWidth:1}
    ]
    ...
  }
  valueAxis={
    ...
    lines:[
        {value:50,dash:[8,5],color:'blue',lineWidth:2}
    ]
    ...
  }
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Set Text On Points

Set text on each points by set 'getPointText' function props on data that read text value from point object and can get custom style.
Code:
<Chart
  ...
  data={[
    {
      ...
      points:[
        {date:'January',percent:10,size:'low'},
          {date:'February',percent:15,size:'low'},
          {date:'March',percent:25,size:'low'},
          {date:'April',percent:30,size:'low'},
          {date:'May',percent:40,size:'medium'},
          {date:'June',percent:35,size:'medium'},
          {date:'July',percent:40,size:'medium'},
          {date:'August',percent:60,size:'high'},
          {date:'September',percent:60,size:'high'},
          {date:'October',percent:75,size:'high'},
          {date:'November',percent:80,size:'high'},
          {date:'December',percent:100,size:'high'}
      ],
      getPointText:(point)=>{
        return {
          value:point.size,
          top:20,
          fontSize:12,
          rotate:point.date === 'December'?90:0,
          align:[0,0]
        }
      }
      ...
    }
  ]}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Rotate Horizontal Labels

rotate horizontal labels by 'labelRotate' props.
Code:
<Chart
  ...
  labelRotate={45}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text

Set Axis Size

Set axis thickness by 'size' property in keyAxis or valueAxis.
Code:
<Chart
  ...
  keyAxis={{
    size:90  
  }}
  valueAxis={{
    edit:(value)=>value * 1000 + '$',
    size:70  
  }}
  labelRotate={90}
  labelSize={40}
  ...
/>
Preview(Click image and open demo on stackblitz):

alt text