2016-06-22 13 views
0

Ich versuche Achsenbeschriftungen in verschiedenen Farben zu zeichnen. Mit diesem Code:Achsenbeschriftungen können nicht in verschiedenen Farben gezeichnet werden ("grafischer Parameter 'col.axis' hat die falsche Länge")

handball <- c(1.8, 1.72, 1.7, 1.65, 1.78, 1.68, 1.85, 1.72, 1.78, 1.79, 1.64, 1.74, 1.82, 1.77, 1.80, 1.84, 1.83, 1.80, 1.90, 1.82, 1.69, 1.78, 1.70) 
hist(handball, prob = TRUE, col = "grey", axes = FALSE, xlab = NULL, ylab = NULL, xlim = c(min(handball), max(handball))) 
lines(density(handball), col = "blue", lwd = 2) 
lines(density(handball, adjust = 2), lty = "dotted", col = "darkgreen", lwd = 2) 
axis(side = 1, at = c(min(handball), quantile(handball, 1/4), median(handball), quantile(handball, 3/4), max(handball)), labels = c(min(handball), quantile(handball, 1/4), median(handball), quantile(handball, 3/4), max(handball)), col.axis = c("black", "black", "red", "black", "black")) 

ich diesen Fehler:

Error in axis(side = 1, at = c(min(handball), quantile(handball, 1/4), : 
    graphical parameter "col.axis" has the wrong length 

Was mache ich falsch?

+2

Von '? Par': _" col.axis: Die Farbe, die für die Achsenanmerkung verwendet werden soll. Standardmäßig wird "schwarz" angezeigt. "_. Es ist ein Vektor der Länge "1". Sie können keine anderen Farben so einstellen. – lukeA

+0

Danke, @lukeA, es scheint, dass ich zwei Achsen, eine für jede Farbe, zeichnen muss ... –

+0

@was yep, 'at <- c (min (Handball), Quantil (Handball, 1/4), Median (Handball), Quantil (Handball, 3/4), Max (Handball)); Namen (at) <- c ("schwarz", "schwarz", "rot", "schwarz", "schwarz"); für (x in seq (at)) Achse (Seite = 1, at = bei [x], col.axis = Namen (at) [x]) 'oder etwas. – lukeA

Antwort

0

@lukeA wies in ihrem Kommentar darauf hin, dass die Col.-Achse nur einen Wert annehmen kann. So aufgetragen ich zwei Achsen, eine für jede Farbe:

axis(side = 1, at = c(median(handball)), labels = c(median(handball)), col.axis = "red") 
axis(side = 1, at = c(min(handball), quantile(handball, 1/4), quantile(handball, 3/4), max(handball)), labels = c(min(handball), quantile(handball, 1/4), quantile(handball, 3/4), max(handball))) 

Sieht jetzt fein:

enter image description here

Here ist eine andere Lösung, die eine benutzerdefinierte Funktion, die Sinn macht, wenn Sie viele Farben haben , aber mit nur zwei Farben fand ich einfach den Achsencode duplizieren und die unerwünschten Werte löschen, um schneller und einfacher zu sein.