function createGraph(modules, circular, config, options) {
	const g = gv.digraph('G');
	const nodes = {};
	const cyclicModules = circular.reduce((a, b) => a.concat(b), []);

	Object.keys(modules).forEach((id) => {
		nodes[id] = nodes[id] || g.createNode(id);

		if (!modules[id].length) {
			setNodeColor(nodes[id], config.noDependencyColor);
		} else if (cyclicModules.indexOf(id) >= 0) {
			setNodeColor(nodes[id], config.cyclicNodeColor);
		}

		modules[id].forEach((depId) => {
			nodes[depId] = nodes[depId] || g.createNode(depId);

			if (!modules[depId]) {
				setNodeColor(nodes[depId], config.noDependencyColor);
			}

			g.createEdge([nodes[id], nodes[depId]]);
		});
	});
	const dot = gv.toDot(g);
	return adapter
		.toStream(dot, options)
		.then(toArray)
		.then(Buffer.concat);
}
Creates the graphviz graph.
@param  {Object} modules
@param  {Array} circular
@param  {Object} config
@param  {Object} options
@return {Promise}