This project is a plug and play kind of solution to get a github style D3.js scrollable Heat map with dynamic width and height. some of the cool features are-
- Renders n number of months in a single row
- Main Container of Heatmaps is scrollable
- Cell size, color, legends, week labels are easy to configure points in code and ready to use.
- No License library used except D3.js.
- Data.json
- index.html
- CalendarHeatMap.js
- style.css
// Data Format required - var data = [ { "DATEID":"20210401", "DB_DATE":"2021-04-01", "DAY":"1", "DAY_NAME_SHORT":"Thu", "WEEKDAYNO":"4", "WEEKNO":"13", "WEEK_OF_MONTH":"0", "MONTHID":"202104", "M_NAME":"Apr-21", "YEARID":"2021", "ORDER_ID":"1", "TOTAL_AMOUNT":"504", "RECIEVED_AMOUNT":"500", "DISCOUNT":"4", "ORDER_DATE":"01-04-2021", "BAL_FLAG":"1" } ]
You can set below paramaters to change heatmap look and feel
// dataset grouping at different levels
var months = d3.groups(dataset, d => d.MONTHID)
var months_name = d3.groups(dataset, d => d.M_NAME)
// Week labels format and legends for each KPI
var week = ["Sun","Tue","Thu","Sat"];
var legends = ["Balance Pending","No Order Recieved","Order Recieved"]
var box = 12; //cell size - ideal is 12 to 25
var legends = ["Balance Pending","No Order Recieved","Order Recieved"]
// Accessor Functions can e set to relevent KPIS, except date related data points.
var balanceFlagAccessor = (d) => d.BAL_FLAG;
var dayNameAccessor = (d)=>d.DAY_NAME_SHORT;
var orderAmountAccessor = (d)=>d.TOTAL_AMOUNT;
var balanceAmountAccessor = (d)=>(d.TOTAL_AMOUNT-d.DISCOUNT-d.RECIEVED_AMOUNT);
var dateAccessor = (d) => d.DB_DATE;
var weekDayNoAccessor = (d)=>d.WEEKDAYNO;
var weekOfMonthAccessor = (d)=>d.WEEK_OF_MONTH;
...are always welcome!