venn.js
GitHub: https://github.com/benfred/venn.js
It uses D3.js as the underlying graphics library.
1. Specify and draw sets
→ View online
// Code taken from the GitHub repository, the license specified there applies.
// define sets and set set intersections
var sets = [{label: "A", size: 10}, {label: "B", size: 10}],
overlaps = [{sets: [0,1], size: 2}];
// get positions for each set
sets = venn.venn(sets, overlaps);
// draw the diagram in the 'simple_example' div
venn.drawD3Diagram(d3.select(".simple_example"), sets, 300, 300);
2. Colorize sets
I haven't tried choosing custom colors, but it's likely that it's possible.
You can also arbitrarily style intersection areas: http://benfred.github.io/venn.js/examples/intersection_tooltip.html
3. Label sets
See the first example.
Bonus 4. Label intersection areas
Not possible as far as I know. (I must admit that I haven't fully read the documentation and the code.)
Note 1
There are some cases where the circles cannot be layouted correctly. Switching to the multidimensional scaling algorithm might solve these problems in some cases: http://benfred.github.io/venn.js/examples/mds.html
However, I've also encountered ohter edge cases where the layout failure is due the proportional scaling of the circles. You might want to read the blog articles of the author concerning the problems you face with drawing Venn diagrams:
Note 2
Venn.js requires you to build the overlaps and sets yourself. If anyone is interested in the ability to input {1;2;3} ∩ {2;3}
, I've written a small library to do this. Maybe I put the code on GitHub somewhen in the future.