Variieren die Farben von Achsenbeschriftungen in R basierend auf anderen Variablen

Ich in der Regel mit ggplot2, aber in diesem Fall bin ich mit dem regelmäßigen image() Funktion zum zeichnen einer heatmap von einem großen Datensatz. Ich kann label alle des labels, wie rot, aber ich möchte die Beschriftung der y-Achse mit text in verschiedenen Farben basierend auf einem Vektor der Farbe, die Definitionen, die ich generieren:

grid = structure(c(1:12),.Dim = c(4,3))
labs = c("A","B","C")
image(1:4,1:3,grid,axes=FALSE, xlab="", ylab = "")
#This works but isn't the colors I want
axis(2,at=1:length(labs),labels=labs,las=2, adj=1,cex.axis=0.6,col.axis="red")

Generiert das folgende Bild:

Variieren die Farben von Achsenbeschriftungen in R basierend auf anderen Variablen

Ich würde gerne labels A und C werden schwarz und B rot. Dies ist, was ich versucht habe, aber es gibt eine "falsche Länge" Fehler...

axiscolors = c("black","red","black")
axis(2,at=1:length(labs),labels=labs,las=2, adj=1, cex.axis=0.6, col.axis=axiscolors)

Dies ist der Effekt, den ich bin danach mit ein paar "echte" Daten...

Variieren die Farben von Achsenbeschriftungen in R basierend auf anderen Variablen

EDIT:

Als back-up, falls dies möglich ist, in ggplot2, ich könnte bereit sein, zu re-factor meinem code. Es gibt ein paar andere Anwendungen die ich benutzen würde für diese als gut.

Ich herausgefunden, einen Weg zu zeichnen eine Schicht von roten Symbole über der Spitze des alten labels, aber würde es vorziehen, eine native-Methode mit der Farbe, Vektor, wenn möglich...

sublabs = c("B")
axis(2,at=match(sublabs,labs),labels=sublabs,las=2, adj=1, cex.axis=0.6, col.axis="red")

Andere Weg wäre, um text() wenn ich könnte die Etiketten außerhalb der Handlung Raum...

text(c(1,1,1),c(1,2,3),labs,col=c("black","red","black"))

UPDATE: Siehe weiter unten für eine Lösung, die mit ggplot2...

  • Ich glaube nicht, dass Sie finden ein "native-Methode". Es ist eine ziemlich starke kulturelle Widerstand unter den R Autoren zu dem, was einige Leute nennen würde "chart-junk".
  • Interessant. Ich bin ein die-hard Tufte-ein, aber eine person die "chart-junk" ist eine andere person Informationen. (In den non-Spielzeug-Beispiel habe ich 91 Werte auf der y-Achse und bin Etikettierung der 16 neu durchsetzt Zeilen zu markieren, wo Sie herauskommen.)
  • Ich habe mir den code, der ist ausgesetzt, ein normaler Benutzer und nicht sehen, alles, was gehackt werden in reiner R für graphics::axis. Ich Frage mich, ob raster-Grafiken möglicherweise eine Angriffsmöglichkeit. Ich sehe, dass es ist ein lattice-version von lattice::axis.default und es sieht aus wie die 'tun.Etiketten Abschnitt wäre vielversprechend. Sie müssen möglicherweise auch hack lattice::panel.axis.
  • ?mtext statt ?text wäre der Weg zu gehen.
  • Vielleicht könnten Sie verwenden layout zu erstellen, die unabhängige Achse Etiketten und positionieren Sie Sie nah am original graph ohne Achsenbeschriftungen. Aber das scheint mehr Arbeit als das zeichnen einer Schicht von neuen Symbolen über die alten Symbole. Vielleicht könnten Sie Ihre position text - Anweisung außerhalb der Zeichnungsfläche Bereich mit outer, inset - und/oder mar.
InformationsquelleAutor beroe | 2013-09-17
Schreibe einen Kommentar