2015-11-04 1 views
7

Ich bin auf der Suche nach Bars, die bei der Verwendung von DT datatable erscheinen in der Mitte der Zellen einer Spalte und streckte nach links oder rechts, je nachdem, ob der Wert in der Zelle positiv ist oder negativ.styleColorBar Zentrum und Verschiebung Left/Right abhängig von Sign

Ich habe versucht, die Funktion styleColorBar und Ändern des Arguments backgroundPosition zu 'left' oder 'center' jedoch mit jeder Verwendung versuchen die Balken noch rechts von der Zelle angezeigt und immer nach links zu gehen.

Ich kann kein Beispiel aus dem R-Code finden, habe aber ein Beispiel hinzugefügt, was mit Excel gemacht werden kann; Die Farben sind nicht notwendig, aber wenn enthalten, wäre das ein Bonus.

enter image description here

+1

Dies ist eine interessante Frage, aber es fehlt die Mühe, wie es präsentiert wird. Bitte fügen Sie ein reproduzierbares Beispiel hinzu. Sie könnten ein minimales Beispiel hinzufügen, in dem Sie 'backgroundPosition = 'left'' verwendet haben, damit die Leute es verwenden und versuchen können, eine Lösung zu finden. Es ist sehr unwahrscheinlich, dass jemand (einschließlich mir selbst) sich die Zeit nehmen wird, den Code zu schreiben, der die hier beschriebene Situation erzeugt und dann versucht, eine Lösung zu finden ... – LyzandeR

+0

Ich verstehe, was ich geschrieben habe, war nicht leicht zu verstehen; habe es neu geschrieben, also liest es ein bisschen besser. Wahrscheinlich immer noch nicht großartig, aber hoffentlich macht es mehr Sinn als vorher! –

Antwort

14

Sie können eine benutzerdefinierte Funktion styleColorBar machen, die die CSS-Gradienten (gleiche wie das Original styleColorBar), um die Art von Bars zu machen verwendet Sie wollen. Hier

ist ein Beispiel (sorry für die lange Linie, das Hinzufügen neuer Linien bricht die 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)) 
} 

einige Testdaten verwenden:

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

Vielen Dank, hat auch für mehrere Spalten perfekt funktioniert! –

Verwandte Themen