I grafici di Google Timeline sembrano suggerire la colorazione di singoli blocchi della linea temporale per la documentazione: https://google-developers.appspot.com/chart/interactive/docs/gallery/timeline#ControllingColorsGoogle Temporale: Colore ogni barra singolarmente multipla su "stessa" linea
Ma ci sembra essere un problema quando due bar "sovrapposizione" sulla stessa linea, come si può vedere in questo violino: http://jsfiddle.net/7A88H/21/
Ecco il codice della chiave:
dataTable.addRows([
[ 'red/green/blue', 'NAME OF BAR (should be RED) (ff0000)', new Date(1789, 3, 29), new Date(1797, 2, 3) ],
[ 'red/green/blue', 'NAME OF BAR (should be GREEN) (00ff00)', new Date(1796, 2, 3), new Date(1801, 2, 3) ],
[ 'red/green/blue', 'NAME OF BAR (should be BLUE) (0000ff)', new Date(1801, 2, 3), new Date(1809, 2, 3) ]]);
var options = {
colors: ['#ff0000', '#00ff00', '#0000ff'],
};
ho provato a giocare con i th e accettato risposta da questa domanda con l'aggiunta di un 5 ° colonna (il colore) per le mie righe di dati: Google Charts API: Add Blank Row to Timeline?
In particolare, qui è la funzione che ho pensato che avrei potuto essere in grado di dirottare a costruire il mio trucco:
(function(){ //anonymous self calling function to prevent variable name conficts
var el=container.getElementsByTagName("rect"); //get all the descendant rect element inside the container
var width=100000000; //set a large initial value to width
var elToRem=[]; //element would be added to this array for removal
for(var i=0;i<el.length;i++){ //looping over all the rect element of container
var cwidth=parseInt(el[i].getAttribute("width"));//getting the width of ith element
if(cwidth<width){ //if current element width is less than previous width then this is min. width and ith element should be removed
elToRem=[el[i]];
width=cwidth; //setting the width with min width
}
else if(cwidth==width){ //if current element width is equal to previous width then more that one element would be removed
elToRem.push(el[i]);
}
}
for(var i=0;i<elToRem.length;i++)
elToRem[i].setAttribute("fill","none"); //make invisible all the rect element which has minimum width
})();
La speranza era di afferrare ogni rect
(saltando quelli delimitanti) e riempirli (con un terzo ciclo, alla fine) con i loro colori appropriati, ma non riuscivo a capire come ottenere il loro colore associato (che era in oggetti riga) dagli oggetti rect
stessi.
Sono necessarie date sovrapposte. Questo è il punto della domanda, in realtà, poiché questo problema non esiste quando le date non si sovrappongono. – Bing
Scusa, non ho letto completamente la domanda la prima volta! Fatto alcune modifiche e ora dovrebbe funzionare come tu lo vuoi! –
Correggimi se sbaglio, ma hai semplicemente riordinato gli elementi per gestire il conflitto? Quando li riordino si rompe di nuovo. Nel mio caso (e sospetto che la maggior parte delle persone usino questo grafico) le date vengono estratte da un database o qualcosa del genere, quindi sapere quando si verificano sovrapposizioni richiederebbe MOLTO calcolo. Quindi, il semplice motivo di risolvere questo problema del colore (in tutti i casi, non solo per determinati ordini) sarebbe di grande aiuto. Da qui la domanda e perché ho investito sulla reputazione. – Bing