anchor.diff:  	  let r = d3.scaleSqrt().range([0, 10]) // tamaño de las bolas
   
   	  // domains
  -	  // TODO: Eliminar referencias a tipos de datos concretos
   	  x.domain([
  -	    d3.timeMonth(new Date(d3.min(data.map(d => d3.min(d.value.map((t) => d3.timeFormat("%Y/%m/%d")(new Date(t.key)))))))),
  -	    d3.timeMonth(new Date(d3.max(data.map(d => d3.max(d.value.map((t) => d3.timeFormat("%Y/%m/%d")(new Date(t.key))))))))
  -	  ]);
  +			d3.min(data.map(d => d3.min(d.value.map(v => v.key)))),
  +			d3.max(data.map(d => d3.max(d.value.map(v => v.key))))
  +		]);
  +	  // x.domain([
  +	  //   d3.timeMonth(new Date(d3.min(data.map(d => d3.min(d.value.map((t) => d3.timeFormat("%Y/%m/%d")(new Date(t.key)))))))),
  +	  //   d3.timeMonth(new Date(d3.max(data.map(d => d3.max(d.value.map((t) => d3.timeFormat("%Y/%m/%d")(new Date(t.key))))))))
  +	  // ]);
   	  y.domain(data.map(d => d.key)).padding(0.5);
   
   	  let g = svg.append("g")
  
positive.code: 	});
  	$.getJSON("data/punchcard.json", (data) => {
  
  	  // TODO: Procesar los datos ANTES de pasarselos al gráfico
  	  // para que sea generico
  	  $(".punchcard").each((i, container) => {
  	    punchcard(`#${container.id}`, data)
  	  })
  
negative.code: 	    .call(d3.axisLeft(y));
  	}
  	const punchcard = (context, data, options = {}) => {
  	  // options
  		let itemHeight = options.itemHeight || 50
  	  let gutter = options.gutter || 20
  	  let margin = options.margins || {
  