2017-08-31 2 views
1

Wie kann ich eine Heatmap (oder etwas anderes) erstellen, wenn die y-Achse ungleichmäßig ist? Ich bin auch offen für die Interpolation, aber vorzugsweise ohne sie.Wie kann ich eine Heatmap mit ungleicher Y-Achse erstellen?

Wenn ich in regelmäßigen Abständen die Schicht hatte, konnte ich plotte dies mit der Abbildung unten

ggplot(a, aes(x=time, y=Layer, fill = Value))+ 
    geom_tile()+ 
    scale_fill_gradient2(low="blue",mid="yellow",high="red", midpoint=0.5)+ 
    theme_bw() 

zu bekommen, aber ich bin nicht in der Lage zu gehen, wenn die Schicht nicht von 1-10 natürlichen Zahlen.

enter image description here

dput(droplevels(head(smx,10))) 

structure(list(value = c(5.4023420028113e-07, 5.4023420028113e-07, 
    5.4023420028113e-07, 5.4023420028113e-07, 5.4023420028113e-07, 
    5.4023420028113e-07, 5.4023420028113e-07, 6.74006442227979e-08, 
    6.74006442227979e-08, 6.74006442227979e-08), 
time = structure(c(17156, 17156, 17156, 17156, 17156, 17156, 17156, 17162,  
    17162, 17162), 
class = "Date"), 
layer = c(0.0120349472577243, 0.0177233992991887, 0.00844582491793334, 
    0.00756873916071316, 0.0437965816456147, 0.0168056962032031, 
    0.0181395468747096, 0.0120349472577243, 0.0177233992991887, 
    0.00844582491793334)), 
.Names = c("value", "time", "layer"), 
row.names = c(NA, 10L), 
class = "data.frame") 

FULL DATA IS HIER

https://pastebin.com/mXUiSyvX

+0

Was genau schief geht, wenn Sie versuchen, Ihre Daten zu plotten, und wie wollen Sie die endgültige Handlung aussehen? – Marius

+0

Grundsätzlich habe ich horizontale Linien und keine Blöcke. Das fertige Grundstück sollte dem ähneln, das ich anbrachte, aber im Grunde genommen, überall ungleichmäßige Blöcke ... – maximusdooku

+2

Also sollten die Fliesen den gesamten Grundstücksbereich bedecken oder bis zum Boden des nächsten Ziegels reichen? Sie müssen darüber nachdenken, wie die Zeit- und Layerwerte in Ihren Daten den Kacheln zugeordnet werden, die Sie sehen möchten. – Marius

Antwort

1

Sie geom_rect statt geom_tile verwenden können, um unterschiedlichen Kachelhöhe angeben. Von der Hilfe-Datei:

geom_rect und geom_tile das gleiche tun, sind aber anders parametrisiert: geom_rect nutzt die Positionen der vier Ecken (xmin, xmax, ymin und ymax), während geom_tile verwendet die Mitte der Fliese und seine Größe (x, y, Breite, Höhe).

Unter der Annahme, dass die Schicht Variable in dem Datenrahmen an die Spitze jeder Kachel bezeichnet (dh ymax), können Sie eine verzögerte Schichtvariable für jedes Datum erstellen, damit Sie die ymin in der gleichen Zeile der Daten erhalten Rahmen. Basierend auf Ihrem Daten-Set nahm ich an, auch die niedrigste Fliese bei ymin = 0 beginnt.

library(dplyr) 

ggplot(smx %>% 
     group_by(time) %>% 
     arrange(layer) %>% 
     mutate(layer.min = layer - diff(c(0, layer))) %>% #assuming y axis starts from 0 
     ungroup(), aes(fill = value))+ 
    geom_rect(aes(xmin = time - 0.5, xmax = time + 0.5, 
       ymin = layer.min, ymax = layer), 
      colour = "black") + 
    scale_fill_gradient2(low="blue",mid="yellow",high="red", midpoint = 0.2) + 
    scale_x_date(date_breaks = "1 day", date_labels = "%b %d") + 
    theme_bw() 

ggplot heatmap using geom_rect

(I schwarzen Entwurf für die Fliesen enthalten & den Mittelpunkt in dieser Antwort für klarere visuelle Unterscheidung geändert Do Fühlen Sie sich frei, sie für Ihren tatsächlichen Anwendungsfall zu entfernen.)

Verwandte Themen