2016-08-11 3 views
1

Ich habe ein Niederschlagsgebiet über Südamerika, das von 0 bis 70 reicht. Ich bin nur an Werten zwischen 0 und 12 interessiert, also möchte ich das Feld plotten in diesem Bereich mit Werten> 12 im äußersten Farbe, und ich mag, dass die Farbleiste Legende ein spitzes Ende haben, was darauf hinweisen, dass jeder Wert von mehr als 12 in dieser Farbe ist, so etwas wie diese:Wie man einen spitzen Farbbalken für ein Bildplot macht - R

Example with the color bar the way I want it

Weiß jemand, wie man das macht? Bisher habe ich keinen anderen Weg gefunden als einen rechteckigen Farbbalken.

+3

Ich würde vorschlagen, dass Sie uns zeigen, wie Sie es mit gewöhnlichen Farbbalken getan hätte ... mit einem Arbeitsbeispiel. Dann könnten Mods vorgeschlagen und getestet werden. –

+0

Ich meinte, dass bei der Verwendung von 'image.plot()' zum Beispiel automatisch ein rechteckiger Farbbalken erstellt wird. –

+0

'? Image.plot' gibt zurück:" Keine Dokumentation für 'image.plot' in angegebenen Paketen und Bibliotheken: könnten Sie '?? image.plot' versuchen "(Auch nicht sicher, warum Sie auf diesen Kommentar antworten. Erscheint Ihnen habe eine Antwort.) –

Antwort

5

Ein Ansatz besteht darin, eine eigene benutzerdefinierte Farbbalken-Plotfunktion zu schreiben, die mit primitiven Zeichenfunktionen wie rect(), polygon() und text() implementiert wird. Zum Beispiel:

arrowedColorBar <- function(ylow,yhigh,xcenter,xwidth,nums,...,cols=rainbow(length(nums)+2L)) { 
    x1 <- xcenter-xwidth/2; 
    x2 <- xcenter+xwidth/2; 
    ys <- seq(ylow,yhigh,len=length(nums)+2L); 
    y1 <- ys[1L]; 
    y2 <- ys[2L]; 
    polygon(c(x1,xcenter,x2),c(y2,y1,y2),col=cols[1L]); 
    for (i in seq_along(nums)) { 
     y1 <- ys[i+1L]; 
     y2 <- ys[i+2L]; 
     if (i<length(nums)) rect(x1,y1,x2,y2,col=cols[i+1L]); 
     text(x2,y1,nums[i],pos=4L,...); 
    }; ## end for 
    y1 <- ys[length(ys)-1L]; 
    y2 <- ys[length(ys)]; 
    polygon(c(x1,xcenter,x2),c(y1,y2,y1),col=cols[length(cols)]); 
    invisible(); 
}; ## end arrowedColorBar() 

plot(c(-80,-40),c(-60,20),pch=NA,xlab='x',ylab='y'); 
arrowedColorBar(-60,10,-45,1.3,c(1,2,3,4,5,7,10,13,15),font=2L); 

enter image description here

+0

Großartig! Vielen Dank! Ich werde das versuchen und Sie wissen lassen. –

+0

Arbeitete perfekt, danke nochmal! –

Verwandte Themen