Giter VIP home page Giter VIP logo

google-charts-node's Introduction

google-charts-node

npm

This package allows you to render Google Charts on the server as PNG images. It's part of QuickChart, which offers a suite of tools for rendering charts & graphs as images.

It is based on the Google Visualization API and is made possible through the use of puppeteer, which uses the Chromium browser for "headless" rendering.

For a more detailed walkthrough, see Server-side image rendering for Google Charts on QuickChart.

Setup

This project is available on NPM.

npm install google-charts-node

You may instead prefer to use the hosted version available at https://quickchart.io/google-charts/render (see docs).

Example

const GoogleChartsNode = require('google-charts-node');

// Define your chart drawing function
function drawChart() {
  const data = google.visualization.arrayToDataTable([
    ['City', '2010 Population',],
    ['New York City, NY', 8175000],
    ['Los Angeles, CA', 3792000],
    ['Chicago, IL', 2695000],
    ['Houston, TX', 2099000],
    ['Philadelphia, PA', 1526000]
  ]);

  const options = {
    title: 'Population of Largest U.S. Cities',
    chartArea: {width: '50%'},
    hAxis: {
      title: 'Total Population',
      minValue: 0
    },
    vAxis: {
      title: 'City'
    }
  };

  const chart = new google.visualization.BarChart(container);
  chart.draw(data, options);
}

// Render the chart to image
const image = await GoogleChartsNode.render(drawChart, {
  width: 400,
  height: 300,
});

This produces the following image:

Google Charts Image

The only requirements of your drawChart function are that you must:

  • Define a chart variable or return your chart.
  • Use the provided container variable to render your chart.

Example with arguments

To use outside values in your drawChart function, call render with a Javascript string. Here's an example:

const myArg = 12345;
const myOtherArg = [5, 10, 15, 20];
const drawChartStr = `
  // Create the data table.
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Topping');
  data.addColumn('number', 'Slices');
  data.addRows([
    ['Mushrooms', ${myArg}],
    ['Onions', ${myOtherArg[0]}],
    ['Olives', ${myOtherArg[1]}],
    ['Zucchini', ${myOtherArg[2]}],
    ['Pepperoni', ${myOtherArg[3]}],
  ]);
  // Set chart options
  var options = { title: 'How Much Pizza I Ate Last Night' };
  // Instantiate and draw our chart, passing in some options.
  var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
  chart.draw(data, options);
`;
const image = await GoogleChartsNode.render(drawChartStr, {
  width: 400,
  height: 300,
});

Usage

render(drawChartFunction, options) -> Buffer

The library exposes a single function, render.

drawChartFunction is a Function or Javascript string that is evaluated in order to draw the chart. You should put your regular drawChart Google Charts function here.

options is a dictionary containing some settings and parameters:

  • width: Width of chart canvas (default 100%)
  • height: Height of chart canvas (default 100%)
  • packages: Array of Google Charts packages to import (default ['corechart'])
  • mapsApiKey: Google Maps API key (used only for geochart and map charts)
  • puppeteerOptions: Options passed to puppeteer.launch

More examples

See the examples/ directory for more examples of different charts.

google-charts-node's People

Contributors

brcambui avatar dependabot[bot] avatar rafael-rgsousa avatar typpo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

google-charts-node's Issues

puppeteer launch headless new

Hi! ๐Ÿ‘‹

Firstly, thanks for your work on this project! ๐Ÿ™‚

Today I used patch-package to patch [email protected] for the project I'm working on.

Here is the diff that solved my problem:

diff --git a/node_modules/google-charts-node/lib/render.js b/node_modules/google-charts-node/lib/render.js
index 0551607..21f4989 100644
--- a/node_modules/google-charts-node/lib/render.js
+++ b/node_modules/google-charts-node/lib/render.js
@@ -20,7 +20,7 @@ async function renderGoogleChart(contentRaw, optsRaw) {
     optsRaw || {},
   );
 
-  const browser = await puppeteer.launch(opts.puppeteerOptions);
+  const browser = await puppeteer.launch({headless: 'new'});
 
   const page = await browser.newPage();
   page.setDefaultTimeout(RENDER_TIMEOUT_MS);

This issue body was partially generated by patch-package.

Navigation timeout of 2000 ms exceeded

When i use google-charts-node in my backend then it gives "Navigation timeout of 2000 ms exceeded" most of the Time. and log is ..
{ TimeoutError: Navigation timeout of 2000 ms exceeded
at Promise.then (C:\angular\b-all\node_modules\google-charts-node\node_modules\puppeteer\lib\LifecycleWatcher.js:100:111)
-- ASYNC --
at Frame. (C:\angular\b-all\node_modules\google-charts-node\node_modules\puppeteer\lib\helper.js:116:19)
at Page.setContent (C:\angular\b-all\node_modules\google-charts-node\node_modules\puppeteer\lib\Page.js:550:46)
at Page. (C:\angular\b-all\node_modules\google-charts-node\node_modules\puppeteer\lib\helper.js:117:27)
at Object.renderGoogleChart [as render] (C:\angular\b-all\node_modules\google-charts-node\lib\render.js:32:16)
at process._tickCallback (internal/process/next_tick.js:68:7) name: 'TimeoutError' }

"Failed to launch Browser process" error

Hi all, I'm trying to deploy a nodeJS service to cloudfoundry. It has a "google-charts-node" dependency. The app crashes with the following error, ERR /home/vcap/deps/0/node_modules/google-charts-node/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such f
ile or directory

image

Has anyone come across such error. Suggestions are welcome. Thank you!

offline version

Is there any chance that you know of an offline version? Searching far and wide for a backend graphing library that doesnt require calls to outside services

Problem with google.visualization not defined

๐Ÿ‘‹ This is possibly a very silly question, but where is the google module in google.visualization.arrayToDataTable supposed to be imported from? Seems like this usually comes from:

<script src="https://www.gstatic.com/charts/loader.js"></script>

But of course this isn't available on the backend. Am I supposed to load this some other way?

Extra Line on Pie chart in case of single data value

var data = new google.visualization.arrayToDataTable([["checkbox only assignee","Responsibility Count"],["option 1",3],["option 2",0],["option 3",0],["option 4",0]]);
// Set chart options
var options = {
pieHole: 0,
pieSliceText: "label",
legend: { position: "bottom", textStyle: {fontSize: 10}},
colors: ["#1E5DD3","#033187","#34AA44","#5DD86E"],
};
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
using this data pie chart draw with extra line .
base64 data = "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"
output-onlineimagetools
it's working fine in case of legend: { position: 'right'} only

loading google-charts-node in ES6 module

Hi there,

in my project I am using ES6 modules, how to import google-charts-node (it is commonJS)? I have tried this script and it does generate blank(empty) PNG:

`import { writeFileSync } from 'fs';
import GoogleChartsNode from 'google-charts-node';
(async () => {
const image = await GoogleChartsNode.render(generateBarChart, {
width: 400,
height: 300,
});

writeFileSync('google-chart.png', image);

})();

function generateBarChart() {

  var data = google.visualization.arrayToDataTable([
    ['City', '2010 Population'],
    ['New York City, NY', 8175000],
    ['Los Angeles, CA', 3792000],
    ['Chicago, IL', 2695000],
    ['Houston, TX', 2099000],
    ['Philadelphia, PA', 1526000],
  ]);

  var options = {
    title: 'Population of Largest U.S. Cities',
    chartArea: { width: '50%' },
    hAxis: {
      title: 'Total Population',
      minValue: 0,
    },
    vAxis: {
      title: 'City',
    },
  };

  const chart = new google.visualization.BarChart(container);
  chart.draw(data, options);

}
`

Problem with google is not defined

At the beginning every thing work,no problem,
then suddenly this error just show up,
so i dont know what happened

UnhandledPromiseRejectionWarning: ReferenceError: google is not defined

GeoChart Error: Must draw chart before calling getImageURI

Reproduce

(async () => {
  const drawChart = `
  var container = document.getElementById('chart_div');const data = google.visualization.arrayToDataTable([['Country', 'Popularity'],['Germany', 200],['United States', 300],['Brazil', 400],['Canada', 500],['France', 600],['RU', 700]
]);var options={};var chart = new google.visualization.GeoChart(container);chart.draw(data, options);
  `;
  const image = await GoogleChartsNode.render(drawChart, {
    width: 400,
    height: 300,
    package: 'geochart'
  });

  fs.writeFileSync('/tmp/google-chart.png', image);
})();

Node.js without html

Hello again. I'm using node.js without html, then what i need provide in the following code:

const chart = new google.visualization.BarChart(??????????????????????);
        chart.draw(data, options);

TypeScript support

Hi! I'm using typescript for all my projects, and i think is good feature for next update if you add type definitions for library.

Guage chart is giving not a constructor error

As per the given documentation I have added guage in packages array.

     const image = await GoogleChartsNode.render(drawChart, {
                        width: 400,
                        height: 300,
                        packages:['gauge']
          });

And draw function is given as

function drawChart() {

    var data = google.visualization.arrayToDataTable([
        ['Label', 'Value'],
        ['Memory', 80]
      ]);

      var options = {
        width: 400, height: 120,
        redFrom: 90, redTo: 100,
        yellowFrom:75, yellowTo: 90,
        minorTicks: 5
      };

	const chart = new google.visualization.Guage(container);
	chart.draw(data, options);
  }

But If I try to access it from express server I am getting

Page error: Error: TypeError: google.visualization.Guage is not a constructor.
Please help

GuageChartError

Not working on azure cloud function

When trying to deploy a working implementation that works locally on a windows environment, it does not run as a cloud function. The following error is being triggered

Error: Could not find browser revision 756035. Run "npm install" or "yarn install" to download a browser binary.2023-03-13T13:08:21Z [Information] at ChromeLauncher.launch (C:\home\site\wwwroot\node_modules\google-charts-node\node_modules\puppeteer\lib\Launcher.js:81:23)2023-03-13T13:08:21Z [Information] at async Object.renderGoogleChart [as render] (C:\home\site\wwwroot\node_modules\google-charts-node\lib\render.js:23:19)2023-03-13T13:08:21Z [Information] at async createChart (C:\home\site\wwwroot\TimerTrigger1\helpers\donut_chart.js:59:19)2023-03-13T13:08:21Z [Information] at async getDonutChartData (C:\home\site\wwwroot\TimerTrigger1\helpers\donut_chart.js:122:13)2023-03-13T13:08:21Z [Information] at async processReports (C:\home\site\wwwroot\TimerTrigger1\helpers\index.js:56:33)2023-03-13T13:08:21Z [Information] at async module.exports (C:\home\site\wwwroot\TimerTrigger1\index.js:9:5)

It seems that the code is trying to launch Puppeteer with a specific browser revision (756035), but the binary for that revision is not available on your system.

You can try running "npm install" or "yarn install" to download the necessary browser binary. This will install the required dependencies and should solve the issue.

If that doesn't work, you can also try passing a different browser revision to Puppeteer by setting the "executablePath" option. For example:

javascript

const puppeteer = require('puppeteer-core');

const browser = await puppeteer.launch({
executablePath: '/path/to/chrome',
});

"TypeError: JSON.stringify(...) is not a function" when trying to pass arguments

So, I'll make this as short as possible. I am running a test script. Here is the script for reference:

const GoogleChartsNode = require("google-charts-node")
const strftime = require("strftime")
const { badgeDates } = require("./badges.json")
var newBadges = []
var dateGroups = {}
var rows = []

const fs = require("fs")

for (let i = 0; i < badgeDates.length; i++) {
    let badge = badgeDates[i]
    let awardedDate = new Date(Date.parse(badge.awardedDate))
    badge.awardedDate = awardedDate
    newBadges.push(badge)

    let group = strftime("%B %Y", awardedDate)
    if (!(group in dateGroups)) {
        dateGroups[group] = []
    }
    dateGroups[group].push(badge)

    rows.push([awardedDate, i + 1])
}


const drawChart = `

    let data = new google.visualization.DataTable();
    data.addColumn('date', 'Date');
    data.addColumn('number', 'Badges');

    data.addRows(${JSON.stringify(rows)});

    let options = {
        hAxis: {
            title: 'Earned Date'
        },
        vAxis: {
            title: 'Badge Count'
        }
    };

    let chart = new google.visualization.LineChart(container);
    chart.draw(data, options);
`

(async () => {
    const image = await GoogleChartsNode.render(drawChart, {
        width: 400,
        height: 300,
      });
    
    fs.writeFileSync("./my_image_chart.png", image)
})()

As seen from the title, I get an error saying JSON.stringify(...) is not a function, and I don't know why. I tried moving the JSON.stringify() part outside the string, but the same thing happens. I am not really sure what I'm doing wrong here, so if someone could help me out, that would be amazing. Thank you.

Getting error while using "google-charts-node" for dynamic data

I am trying to create charts using "google-charts-node" npm via REST api but getting this error everytime when I try to pass dynamic data from request body in the drawChart function but it works fine when I passed static parameters

Here is my code:


const GoogleChartsNode = require('google-charts-node');
const express=require('express')
const body_parser=require('body-parser')

const fs = require('fs');
const app=express()

app.use(body_parser.json());

async function drawChart(body) {

var arr=[]
arr=body.chartData
console.log(arr)

    var data =  google.visualization.arrayToDataTable(arr);
  
    var options = {
      title: 'Revenue of C2C 2020',
      chartArea: { width: '50%' },
      hAxis: {
        title: 'Revenue',
        minValue: 0,
      },
      vAxis: {
        title: 'Products',
      },
    };
      var chart = new google.visualization.BarChart(container);
  
   chart.draw(data, options);
  }

  
  
  

  const Img= async(body) => {
    const image = await  GoogleChartsNode.render(drawChart(body), {
      width: 400,
      height: 300,
    });
    return image
}
var bodyData

const getDataFirst=(data,callback)=>{
    console.log('func',data)
    callback(data)
}

app.post('/drawcharts', async (req,res)=>{
bodyData=req.body
getDataFirst(bodyData,async(data)=>{
    console.log('callback',data)
    const v= await Img(data)
    console.log(v)
})`

and getting this error

(node:9608) UnhandledPromiseRejectionWarning: ReferenceError: google is not defined
at drawChart (C:\Users\C2C04\Desktop\Charts\test.js:16:17)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.