2017-07-11 11 views
1

Ich versuche, ein Liniendiagramm über eine gefüllte Kontur zu setzen, um einen ähnlichen Effekt wie in Abbildung 1 here zu erzielen.Wie überlagert man ein Liniendiagramm über einer gefüllten.Kontur?

require("lattice") 
require("latticeExtra") 

mat = matrix(c(1:9),nrow=3,byrow=TRUE); time = c(1:3); mid = c(1:3) 
mat 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 4 5 6 
[3,] 7 8 9 

line = colMeans(mat) 

shades = colorRampPalette(c("red", "green")) 
filled.contour(mid,time,t(apply(mat,2,rev)), 
       zlim=c(1,9),nlevels=9,col=shades(9)) 
xyplot(line~time,type="l") 

Der offensichtlichste Weg zu gehen ist mit Ebenen, aber es hat nicht für mich bisher funktioniert.

layer(filled.contour(mid,time,t(apply(mat,2,rev)), 
       zlim=c(1,9),nlevels=9,col=shades(9))) +  
layer(xyplot(line~time,type="l")) 

Irgendwelche Vorschläge?

+0

Ich würde gehen versuchen mit 'par (new = TRUE)' vor dem Zeichnen der zweiten Handlung, aber ich benutze 'Gitter' nicht, also weiß ich nicht, ob es für Sie arbeiten wird. –

+0

Die Funktion filled.contour ist eigentlich nicht Teil der Gitter- oder GitterExtra-Pakete. Es ist Teil der Grafik von Base R. Es arbeitet nicht zusammen mit den xyplot- oder Schichtfunktionen, die Teil von Gitter und Gitterextra sind. – Konn

Antwort

0

auf der Hilfeseite der Suche nach filled.contour, können Sie unter „Hinweis“ lesen: Wenn Sie das Haupt-Konturdiagramm zu annotieren wollen, zum Beispiel Punkte hinzufügen, können Sie Grafikbefehle im plot.axes Argumente angeben.

### your code 
require("lattice") 
require("latticeExtra") 

mat = matrix(c(1:9),nrow=3,byrow=TRUE) 
time = c(1:3) 
mid = c(1:3) 
line = colMeans(mat) 

shades = colorRampPalette(c("red", "green")) 

### call to filled.contour with plot.axes{} for some line 
filled.contour(mid, time, t(apply(mat, 2, rev)), 
      zlim = c(1, 9), nlevels = 9, col = shades(9), 
      plot.axes = { axis(1); axis(2); lines(c(1.5,2, 2.5), c(2,2.8, 2.8), col = "white") } 
) 

Der Code ergibt dieses Grundstück:

enter image description here

Sie auch die Beziehung zwischen Objekten line und time mit dem folgenden Code zeichnen könnte. Man beachte, dass ich 3 von line subtrahieren musste es in der graphischen Darstellung fit zu machen:

filled.contour(mid, time, t(apply(mat, 2, rev)), 
       zlim = c(1, 9), nlevels = 9, col = shades(9), 
       plot.axes = { axis(1); axis(2); lines(line-3, time, col = "white") } 
) 

die Grafik Nachgeben unter: enter image description here

Bitte lassen Sie mich wissen, ob dies ist, was Sie wollen.

Verwandte Themen