Ordinal.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. var zrUtil = require("zrender/lib/core/util");
  2. var Scale = require("./Scale");
  3. /**
  4. * Linear continuous scale
  5. * @module echarts/coord/scale/Ordinal
  6. *
  7. * http://en.wikipedia.org/wiki/Level_of_measurement
  8. */
  9. // FIXME only one data
  10. var scaleProto = Scale.prototype;
  11. var OrdinalScale = Scale.extend({
  12. type: 'ordinal',
  13. init: function (data, extent) {
  14. this._data = data;
  15. this._extent = extent || [0, data.length - 1];
  16. },
  17. parse: function (val) {
  18. return typeof val === 'string' ? zrUtil.indexOf(this._data, val) // val might be float.
  19. : Math.round(val);
  20. },
  21. contain: function (rank) {
  22. rank = this.parse(rank);
  23. return scaleProto.contain.call(this, rank) && this._data[rank] != null;
  24. },
  25. /**
  26. * Normalize given rank or name to linear [0, 1]
  27. * @param {number|string} [val]
  28. * @return {number}
  29. */
  30. normalize: function (val) {
  31. return scaleProto.normalize.call(this, this.parse(val));
  32. },
  33. scale: function (val) {
  34. return Math.round(scaleProto.scale.call(this, val));
  35. },
  36. /**
  37. * @return {Array}
  38. */
  39. getTicks: function () {
  40. var ticks = [];
  41. var extent = this._extent;
  42. var rank = extent[0];
  43. while (rank <= extent[1]) {
  44. ticks.push(rank);
  45. rank++;
  46. }
  47. return ticks;
  48. },
  49. /**
  50. * Get item on rank n
  51. * @param {number} n
  52. * @return {string}
  53. */
  54. getLabel: function (n) {
  55. return this._data[n];
  56. },
  57. /**
  58. * @return {number}
  59. */
  60. count: function () {
  61. return this._extent[1] - this._extent[0] + 1;
  62. },
  63. /**
  64. * @override
  65. */
  66. unionExtentFromData: function (data, dim) {
  67. this.unionExtent(data.getDataExtent(dim, false));
  68. },
  69. niceTicks: zrUtil.noop,
  70. niceExtent: zrUtil.noop
  71. });
  72. /**
  73. * @return {module:echarts/scale/Time}
  74. */
  75. OrdinalScale.create = function () {
  76. return new OrdinalScale();
  77. };
  78. var _default = OrdinalScale;
  79. module.exports = _default;