bar-stacked.html 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <html>
  2. <head>
  3. <title>Stacked Bar Chart</title>
  4. <script type="text/javascript" src="../protovis-d3.1.js"></script>
  5. </head>
  6. <body>
  7. <script type="text/javascript+protovis">
  8. var data = pv.range(3).map(function() pv.range(10).map(Math.random)),
  9. w = 400,
  10. h = 250,
  11. x = pv.Scale.linear(0, 3).range(0, w),
  12. y = pv.Scale.ordinal(pv.range(10)).splitBanded(0, h, 4/5);
  13. var vis = new pv.Panel()
  14. .width(w)
  15. .height(h)
  16. .bottom(20)
  17. .left(20)
  18. .right(10)
  19. .top(5);
  20. var bar = vis.add(pv.Panel)
  21. .data(data)
  22. .add(pv.Bar)
  23. .data(function(a) a)
  24. .top(function() y(this.index))
  25. .height(y.range().band)
  26. .left(pv.Layout.stack())
  27. .width(x);
  28. bar.anchor("right").add(pv.Label)
  29. .visible(function(d) d > .2)
  30. .textStyle("white")
  31. .text(function(d) d.toFixed(1));
  32. bar.anchor("left").add(pv.Label)
  33. .visible(function() !this.parent.index)
  34. .textMargin(5)
  35. .textAlign("right")
  36. .text(function() "ABCDEFGHIJK".charAt(this.index));
  37. vis.add(pv.Rule)
  38. .data(x.ticks())
  39. .left(function(d) Math.round(x(d)) - .5)
  40. .strokeStyle(function(d) d ? "rgba(255,255,255,.3)" : "#000")
  41. .add(pv.Rule)
  42. .bottom(0)
  43. .height(5)
  44. .strokeStyle("#000")
  45. .anchor("bottom").add(pv.Label)
  46. .text(function(d) d.toFixed(1));
  47. vis.render();
  48. </script>
  49. </body>
  50. </html>