Realtime graph data visualization library for React
Demo: realgraph.vercel.app
Demo GitHub: github.com/peterbasar/realgraph-demo
Package size:
28.6 kB Minified 7.2 kB Minified + Gzippedz
- Plot line graph using
- your own array of points
- internal points storage
- callback value function (adds points in intervals)
 
- Customize CSS styling of any HTML elements of the package to suit your style by providing styleobject as parameter with appropriate HTML element ID, seeGraphStyleIin /src/components/types.ts
- Pause callback function
- Export options
- CSV
- SVG (visible or full)
- Points array
- Access to internal variables
 
npm install realgraph
- Types: src/components/types.ts
- Default values: src/components/Graph/GraphDefaultProps.ts
export interface GraphI {
  points?: pointsI
  width?: widthI
  height?: heightI
  interval?: intervalI
  count?: countI
  memory?: memoryI
  min?: minI
  max?: maxI
  style?: GraphStyleI
  isCallback?: isCallbackI
  getValueCallback?: getValueCallbackI
  active?: boolean
  formatCursorX?: formatCursorXI
  formatCursorY?: formatCursorYI
  axisEnableX?: axisEnableXI
  axisEnableY?: axisEnableYI
  axisHeightX?: axisHeightXI
  axisWidthY?: axisWidthYI
  axisTitleX?: axisTitleXI
  axisTitleY?: axisTitleYI
  axisXSectionCount?: axisSectionCountI
  axisYSectionCount?: axisSectionCountI
  formatAxisX?: formatAxisXI
  formatAxisY?: formatAxisYI
  axisPositionX?: axisPositionXI
  axisPositionY?: axisPositionYI
  isGraphMoving?: isGraphMovingI
  graphMovingRate?: graphMovingRateI
}- points?: Array<{ x: number y: number }>:- List of points where xrepresents Unix time andyvalue on the graph
- Use when you want to use your own custom list of points
- Pair with isCallback={false}andisGraphMoving={true}
 
- Pair with 
 
- List of points where 
- width?: number- Graph width (excluding width of Y axis)
 
- height?: number- Graph height (excluding height of X axis)
 
- interval?: number- Delay for calling callback function in [ms]
 
- Delay for calling callback function in 
- count?: number- How many points are visible in the graph
 
- memory?: number- Maximum size of the array of points being stored and plotted withing the graph
 
- min?: number- Minimum value shown in the graph
 
- max?: number- Maximum value shown in the graph
 
- style?: GraphStyleI- Object of IDs to which user can assign CSS and other element properties
- See GraphStyleIin /src/components/types.ts
 
- isCallback?: boolean- Whether callback function should be called each interval [ms]
 
- Whether callback function should be called each 
- getValueCallback?: () => number- Callback function
 
- active?: boolean- When false, graph will show last point to the right and any additional rendering will not update X axis position of these points, only adding new points will move the graph to the left
- When true, points on the graph that were re-rendered will be correctly position on the X axis
 
- When 
- formatCursorX?: (value: number) => string | number- Function for formatting cursor X axis value
 
- formatCursorY?: (value: number) => string | number- Function for formatting cursor Y axis value
 
- axisEnableX?: boolean- Whether to turn on X axis
 
- axisEnableY?: boolean- Whether to turn on Y axis
 
- axisHeightX?: number- Height of X axis
 
- axisWidthY?: number- width of Y axis
 
- axisTitleX?: string- X axis title
 
- axisTitleY?: string- Y axis title
 
- axisXSectionCount?: number- Number of sections on the X axis
 
- axisYSectionCount?: number- Number of sections on the Y axis
 
- formatAxisX?: (value: number) => number | string- Function for formatting values shown on X axis
 
- formatAxisY?: (value: number) => number | string- Function for formatting values shown on Y axis
 
- axisPositionX?: 'TOP' | 'BOTTOM'- Whether to show X axis on the top or the bottom side of the graph
 
- axisPositionY?: 'LEFT' | 'RIGHT'- Whether to show Y axis on the left or the right side of the graph
 
- isGraphMoving?: boolean- Whether to rerender the points in the Graph with graphMovingRate [Hz]rate
 
- Whether to rerender the points in the Graph with 
- graphMovingRate?: number- Value in Hertz [Hz]representing how often to re-render points in the graph
 
- Value in 
import Graph from 'realgraph'
function Example() {
  return (
    <Graph
      width={500} // Manually set graph width (excluding axis)
      height={500} // Manually set graph height (excluding axis)
    />
  )
}import Graph from 'realgraph'
function Example() {
  return (
    <Graph
      max={1.1} // Maximum value in a graph
      min={-1.1} // Minimum value in a graph
      count={50} // Number of points in a graph at a time
      interval={100} // Delay between callbacks in milliseconds
      interval={100} // Delay between callbacks in milliseconds
      axisXSectionCount={1} // Number of sections on X axis
      axisYSectionCount={6} // Number of sections on Y axis
      width={width} // Manually set graph width
      height={height} // Manually set graph height
      getValueCallback={() => {
        return Math.sin(Date.now() / 1000)
      }}
    />
  )
}import { useEffect, useState } from 'react'
import Graph from 'realgraph'
function Example() {
  // Default points
  const [points, setPoints] = useState([
    { x: Date.now() - 1200, y: 10 },
    { x: Date.now() - 700, y: 30 },
    { x: Date.now() - 300, y: 80 },
  ])
  // Adding new points in intervals
  useEffect(() => {
    const intervalId = setInterval(() => {
      setPoints([
        ...points,
        {
          x: Date.now(),
          y: 100 * Math.random(),
        },
      ])
    }, 500)
    return () => {
      clearInterval(intervalId)
    }
  })
  return (
    <RealGraph
      points={points} // Provide points to Graph
      isCallback={false} // Do not call callbacking function
      isGraphMoving={true} // Graph moves in realtime
      max={110} // Maximum value in a graph
      min={-10} // Minumum value in a graph
    />
  )
}import { useEffect, useRef, ForwardedRef } from 'react'
import Graph from 'realgraph'
function Example() {
  // Define ref
  const ref: ForwardedRef<graphExportRefI | null> = useRef(null)
  // Adding new points in intervals
  useEffect(() => {
    const intervalId = setInterval(() => {
      if (ref && ref.current) {
        ref.current.addPoint(100 * Math.random())
      }
    }, 500)
    return () => {
      clearInterval(intervalId)
    }
  })
  return (
    <RealGraph
      ref={ref} // Pass your ref and get access to additional functions
      isCallback={false} // Do not call callbacking function
      isGraphMoving={true} // Graph moves in realtime
      max={110} // Maximum value in a graph
      min={-10} // Minumum value in a graph
    />
  )
}import { useRef, ForwardedRef } from 'react'
import Graph from 'realgraph'
function Example() {
  const ref: ForwardedRef<graphExportRefI | null> = useRef(null)
  return (
    <>
      <Graph
        ref={ref}
        width={width} // Manually set graph width
        height={height} // Manually set graph height
      />
      <button
        onClick={() => {
          if (ref && ref.current) console.log('points', ref.current.getPoints())
        }}
      >
        Console log points
      </button>
      <button
        onClick={() => {
          if (ref && ref.current) ref.current.downloadCsv()
        }}
      >
        Download CSV
      </button>
      <button
        onClick={() => {
          if (ref && ref.current) ref.current.downloadSvg()
        }}
      >
        Visible graph SVG
      </button>
      <button
        onClick={() => {
          if (ref && ref.current) ref.current.downloadSvgFull()
        }}
      >
        Full graph SVG
      </button>
    </>
  )
}import Graph from 'realgraph'
const style = {
  graphOuterContainer: {
    background: 'linear-gradient(0deg, rgba(9,32,74,1) 0%, rgba(20,66,147,1) 100%)',
  },
  cursorCircle: {
    fill: 'white',
  },
  cursorLineVertical: {
    stroke: 'white',
    strokeDasharray: '1,10',
  },
  cursorLineHorizontal: {
    stroke: 'white',
    strokeDasharray: '1,10',
  },
  cursorLineHorizontalText: {
    fontWeight: '200',
    style: {
      fill: 'white',
    },
  },
  cursorLineVerticalText: {
    fontWeight: '200',
    style: {
      fill: 'white',
    },
  },
  axisXTitle: {
    color: 'white',
    fontWeight: '200',
  },
  axisXText: {
    color: 'white',
    fontWeight: '200',
  },
  axisYTitle: {
    color: 'white',
    fontWeight: '200',
  },
  axisYText: {
    color: 'white',
    fontWeight: '200',
  },
  axisXSvg: {
    fill: 'white',
  },
  axisYSvg: {
    fill: 'white',
  },
  axisXLine: {
    stroke: 'white',
  },
  axisYLine: {
    stroke: 'white',
  },
  graphPath: {
    stroke: 'white',
    strokeWidth: '1',
  },
},
function Example() {
  return (
    <Graph
      width={width} // Manually set graph width
      height={height} // Manually set graph height
      style={style} // Custom style
    />
  )
}- Make the Graph component automatically resizable to fit the parent element
- Optional offset parameter
- Slider option to check the history
- Point graph option
- Add tests
- Documentation with git integration
- Handling multiple lines in 1 graph
- Graph slows down on inactive tab (energy saving browser feature)





