Quali algoritmi ci sono per scegliere i colori per le linee di trama sui grafici?

19

Mi interessa quali algoritmi o regole posso implementare a livello di codice per generare colori RGB o HSV per le plotline per mantenerli visivamente distinti dai vicini.

So che nella mappatura professionale ci sono algoritmi o regole che assicurano che non ci siano due paesi adiacenti su una mappa dello stesso colore. Posso anche pensare a Microsoft Office Excel come scegliere tinte / sfumature buone per le linee di trama (rosso, poi blu, poi viola / arancione).

Ecco un esempio di ciò di cui sto parlando: ho bisogno di generare colori per 12 righe su uno sfondo nero. I colori qui ho hardcoded a mano usando codici colore RGB sicuri per il web. Il problema sorge quando queste linee si sovrappongono - è difficile dire se si sta guardando viola, viola leggermente viola o viola. Sto cercando un algoritmo migliore per la produzione di colori per le trame come queste.

EccounesempiocheutilizzalalibreriaditracciamentodiFlotperjQuery,haunabellasuccessionedicoloriperigrafici:

    
posta Alex Stone 14.05.2013 - 15:56
fonte

3 risposte

15

Raccomando di usare gli spazi colore HSV o HSL, non lo spazio cromatico RGB, perché HSV e HSL sono strutturati meglio per generare colori che sembrano diversi dall'uomo. Avrai più lavoro in RGB (anche se le conversioni avanti e indietro esistono, se ne hai bisogno)

Ecco come appare HSV / HSL:

QuandosiutilizzalospaziocoloreHSVoHSL,sipuòpresumere(moltoapprossimativamente)cheladifferenzatraicomponentiH(tonalità)diduecolorisiaunabuonaapprossimazionedelladistanzapercettivatraicolori-cioèmaggioreèilcambiamentoditonalitàpiùicolorisarannodiversipergliumani.PuoiprovareasuonareconS(saturazione)eL/V(luminosità/valore),perottenerealtricolorimoltodiversi,manonsembrerannodiversiperlostessocambiamentodivalorerispettoallavariazionedellatonalità.

Asecondadelnumerodicoloridistintidicuihaibisogno,puoidividerelospazioditonalitàinquelnumerodicoloridiversi.Seadesempiohaiunintervalloditonalitàdi256valoriehaibisognodi16coloridistinti,iltuoprimocolorepotrebbeessere(0,128,128),iltuosecondo(16,128,128)ecosìvia.Hosceltoinmodounpo'arbitrarioivaloriS/Lnelmezzo,inquantodisolitosonoleggeriesaturiabbastanzadavederechiaramenteledifferenzedicolore.Questosistemaèsempliceepresupponechetunondebbasaperenullasull'adiacenzadeicolorineltuografico/mappa.

Senonsaiinanticipoquanticoloridistintihaibisognomaconosciillimitesuperiore,edividendolagammaditonalitàincoloriconquellimitesuperioreinmentecomesopra,tidàancoracoloripercettivamentediversi,quindipuoiusareilstessosistemaconillimitesuperiore.

Setu(potessi)haibisognodimolticoloridistinti,potresticomunquescappareusandomoltosimiliopersinoglistessicolori,purchénonappaianovicinoaglialtrielementidelgraficochehannoilcoloresimile.Ciòrichiedeconoscerelatuasituazionediadiacenzanelgraficochestairendendoepotrebbenonesseresempresemplice,eancheinquestocasopotrebbenonessereunabuonaideacomesottolineaDukelingneicommenti:potrebbeesserefontediconfusioneperglispettatorichesiusalostessocoloreduevoltenelgraficoperdueconcettidiversi.

Quindifinalmentenellasituazionepiùcomplessailtuograficoèabbastanzacomplessodanonavereabbastanzaspaziocoloreperassicurartidinonfinireconelementidistinticoncolorichesonotropposimiliusandoilsistemadicuisopra.Inquestocasoènecessariocreareungraficodiadiacenzadeglielementidelgraficodivisualizzazione.L'adiacenzaquièunconcettofuzzy:dovraidefinirlocorrettamenteperlatuasituazioneattuale.Adesempionelsecondoesempio,idatidel12lugliopresentanounpuntodistrozzamentoincuiognicoloreèadiacenteatuttiglialtri.Unapprocciochepuòaiutartiseriesciacostruireilgraficodiadiacenzaèilproblema colorare i grafici - ci sono librerie che possono aiutare tu - ad esempio boost :: graph in C ++ .

    
risposta data 14.05.2013 - 16:02
fonte
1

Per il caso in cui non sai in anticipo quanti colori distinti avrai bisogno di un altro algoritmo interessante è golden ratio algorithm .

Inizia semplicemente con il tuo colore preferito e poi gira intorno alla ruota dei colori nei passaggi della angolo dorato (137,5 °) . Con questa angolazione ti assicurerai che dopo ogni convoluzione attorno alla ruota dei colori i tuoi nuovi colori cadano tra i colori che hai già creato.

(Immagineda wikipedia )

    
risposta data 01.12.2015 - 08:46
fonte
0

Ho sperimentato un po 'e ho scoperto che anche con HSL / HSV non è abbastanza facile ottenere un algoritmo decente per colori piacevoli, indisturbati, calmanti (tutti abbastanza soggettivi, ma ...), ma contrastanti. Alcune parti dello spettro sono visivamente simili - esp. la sezione verde-blu. Quindi ho dovuto aggiungere qualche variazione di luminosità.

Ecco cosa ho trovato:

$.plot($('#application_pie'), data_application_pie, {
    series: { pie: { show: true,  innerRadius: 0.55, offset: { top: 0, left: -120 } } },
    colors: $.map( data_application_pie, function (item, index) {
        return jQuery.Color({
            hue: (index*0.95*360/data_application_pie.length),
            saturation: 0.95,
            //lightness: (index%2/-4)+0.55, alpha: 1
            lightness: ((index%4 == 3 ? 1:0)/-4)+0.55, alpha: 1
        }).toHexString();
    })
});
    
risposta data 30.11.2015 - 17:29
fonte

Leggi altre domande sui tag