There's two ways to understand your question, and both involve very complex answers.
Choosing the right visualization
Whole books have been written on the topic. One of the best guides that I know of is SeeingData's Inside the Chart series. They have an article for each of the more common chart types (bar, pie or radar charts, scatterplots etc.), each detailing what you can see in it, what data it is for and what kind of information it can hide.
As a rule of thumb, if you have a lot of continuous data, like a time series, use a line chart. If you have few datapoints or the data is discrete, bar chart is there for you. Use stacked variants if you're presenting shares (although stacked line chart, or area chart tends to be hard to read). If presenting correlation, use a scatter plot. Changes and differences are best shown on a slope graph. Showing ratios of a single datapoint? If you have just two or three competing fields, use a pie chart, for more elements, a single stacked bar is usually a better choice.
There are more types of graphs, but unless your readers are adept in statistics, they probably won't be able to read them. Remember that it's your responsibility as an author to choose the correct graph type, which does not mislead the readers and which communicates the story of the data the best. Note that there might be more stories in one dataset, hence more graphs, more views of it.
A more general advice is: don't be creative. Good intentions (I want my chart to look cool) often lead to disasters, like this misleading Gun deaths in Florida chart. Just stick to the basics, don't do fancy faux 3D charts and let the data speak for themselves. As Edwart Tufte put it
Show data variation not just design variation
Choosing the right visualization library
Main factors are your requirements, complexity of the task and your coding skills. Google Charts is an online Excel, you click your mouse a couple of times and out comes a decent graph. However, your customization options are very limited, if you don't like the output, you'll have to look elsewhere.
D3.js on the other hand is a low-level tool with quite steep learning curve. It takes a better part of the day to make your first bar chart. Most important fact is, it's not a graphing library, it's data driven documents library. Yes, it does have some helper functions for graphs, but you have to construct them from scratch and it takes a lot of time and effort. You need to know your SVGs, HTML and CSS, as that's what you'll be manipulating. The reward is its extreme flexibility, you can make whole apps based on D3. With skill, it can completely replace jQuery. It's a lot more and a lot harder than a simple pie chart generator.
If a simple pie chart generator is what you want, but Google Charts don't offer the options you need, then the true graphing libraries like Highcharts are for you. They take data in a lot of formats, let you choose the basic output type (eg. pie vs. bar chart), do a little bit of customization and off you go. It's the middle ground.
I don't use the framework-specific libs like n3, Ember or Meteor charts, but I'd guess they fall closer to Highcharts than D3. Just check if all you need is to supply data and a configuration object, or if you're down to creating and setting up individual SVG DOM nodes.
- How to select right chart for your data
- how to create labels for data in donut chart using d3.js
- how to display bottom data for row chart using dc.js
- How to organise/nest data for d3.js chart output
- How to display second y-axis to right of grouped bar chart data in d3
- how to display data from 1st point on words on y axis for line chart in d3.js
- How to change data through select input in d3 chart in svelte?
- how to inline data for D3 bullet chart
- How to integrate dc.js with d3 horizon chart for data rendering?
- D3js: How to load a tsv file and select only the data which is available for two different points
- How to change color only for data grid or x and y axis in chart in D3.js
- How to select only x rows from a csv file for a pie chart
- How to Feed Real time data for Live chart in d3
- How to implement tooltip for D3 line chart with data from 2 arrays?
- ServiceNow / GlideRecord - how to prepare data for chart after query the table?
- How to load chart data from URL for reactd3?
- In d3js, how to plot line chart from csv file, taking data from seperate columns for each row
- How to select elements from array field in dc.js / crossfilter / d3 and use each of them as separate data point for chart?
- How to draw a Bar Chart with time on xAxis and one or more numeric data for yAxis in d3js?
- How to set text color for my d3 chart title?
- Is D3.js the right choice for real-time visualization of Neo4j Graph DB data
- MultiBar chart with nvd3 / d3 only shows labels for every other tick on the x-axis. How can I get them all to show up?
- How to do wordwrap for chart labels using d3.js
- How to update d3.js bar chart with new data
- How to select unique values in d3.js from data
- How to show c3.js No data but with legend for empty column?
- How to load data from an internal JSON array rather than from an external resource / file for a collapsible tree in d3.js?
- How can I get "call" to execute for each data element in D3?
- How to make curved lines to straight lines for Hierarchy Chart using d3.js
More Query from same tag
- How are enter() and exit() detecting updated data in D3?
- How do I select multiple text tags and assign different values to them?
- TypeError: d3.forceSimulation().size is not a function (d3 v4)
- d3 v4 x-axis long labels are half hidden
- d3.select works on body, but not on id. What am I missing?
- How can I fix this bar chart sorting?
- D3js line chart not transitioning, Tooltip error on new bars
- D3 v4 add another node to array
- D3.JS to create a Stacked Area Chart
- D3js: How to load CSV data and convert it into nvd3.js object?
- D3 transitions , less cpu usage?
- can you add filterHandler for composite chart, dc.js?
- Region name not showing in d3 map
- Limit drag area each node d3.js
- In d3.js, skip append() for null data
- how do you interpret the d3 event.x and event.y coordinates?
- D3.js upgrade from version 3 to version 4/5 - diagram not populating
- using json data in a flask endpoint for d3 script
- Follow up: drawing-sequence-logos-in-d3 using images
- How to access values from a nest in D3.js?
- SVG Adding radial gradient to donut chart
- Create a JSON file from a Flask view to be used with D3
- d3.js focus + context via brushing multiple paths not showing up
- Refresh a chart's information by seconds, not a button
- Creating graph with x-axis only using D3
- Saving a SVG, background image is left out
- how to stop movement of force directed graph on force.start
- How to group svg elements
- D3 tree layout: weird behavior of shadow filter when .nodeSize() is applied
- Modify log y-axis scale in dc.js