2015-11-04 96 views
7

Sto cercando di creare barre che quando si utilizza il DT datatable appaiono nel mezzo delle celle di una colonna e si estendono verso sinistra o verso destra a seconda che il valore nella cella sia positivo o negativo.styleColorBar Center e shift Left/Right dipendenti dal segno

Ho provato con la funzione styleColorBar e cambiando l'argomento backgroundPosition a 'left' o 'center' comunque con ognuno cerca le barre appaiono ancora a destra della cella e sempre verso sinistra.

Non riesco a trovare un esempio dal codice R, ma ho allegato un esempio di cosa può essere fatto su Excel; i colori non sono necessari ma se inclusi questo sarebbe un bonus.

enter image description here

+1

Si tratta di un interessante domanda ma manca lo sforzo nel modo in cui viene presentato. Si prega di aggiungere un esempio riproducibile. Puoi aggiungere un esempio minimale in cui hai usato 'backgroundPosition = 'left'' in modo che le persone possano usarlo e provare a trovare una soluzione. È molto improbabile che qualcuno (incluso me stesso) impieghi il tempo necessario per scrivere il codice che produce la situazione descritta qui e quindi provare a trovare una soluzione ... – LyzandeR

+0

Capisco che quello che ho scritto non era facilmente comprensibile; l'ho riscritto, quindi leggerà un po 'meglio. Probabilmente non è ancora bello, ma si spera che abbia più senso di prima! –

risposta

14

Si potrebbe fare un styleColorBar funzione personalizzata che utilizza i gradienti CSS (lo stesso come l'originale styleColorBar) per fare il tipo di barre che si desidera.

Ecco un esempio (scusate per la lunga fila, l'aggiunta di nuove linee rompe il CSS):

color_from_middle <- function (data, color1,color2) 
{ 
    max_val=max(abs(data)) 
    JS(sprintf("isNaN(parseFloat(value)) || value < 0 ? 'linear-gradient(90deg, transparent, transparent ' + (50 + value/%s * 50) + '%%, %s ' + (50 + value/%s * 50) + '%%,%s 50%%,transparent 50%%)': 'linear-gradient(90deg, transparent, transparent 50%%, %s 50%%, %s ' + (50 + value/%s * 50) + '%%, transparent ' + (50 + value/%s * 50) + '%%)'", 
      max_val,color1,max_val,color1,color2,color2,max_val,max_val)) 
} 

Utilizzando alcuni dati di test:

data <- data.frame(a=c(rep("a",9)),value=c(-4,-3,-2,-1,0,1,2,3,4)) 

datatable(data) %>% 
    formatStyle('value', 
       background=color_from_middle(data$value,'red','blue')) 

enter image description here

+0

Grazie mille, ha funzionato perfettamente anche per più colonne! –