2016-10-29 3 views
-1

Ich verwende ggplot2. Ich möchte eine Handlung machen, bei der ich bestimmte Punkte am oberen Rand der Zeichenfläche mit roten Symbolen markiere. So etwas Ähnliches:ggplot2: kann ich am Rand von Plot Canvas plotten?

d <- data.frame(x=1:3, y=3:1) 
markings <- function() { 
    d2 <- data.frame(x=c(1.5,2.5), y=3) 
    geom_point(data=d2, aes(x=x, y=y), col="red") 
} 
ggplot(data=d) + geom_point(aes(x=x, y=y)) + markings() 

Example figure, red dots are certain markers at the upper edge

Das Problem ist, dass markings() Funktion nicht weiß, wo der obere Rand der Figur ist in den gewöhnlichen Grafiken ich verwenden kann par("usr") (der Wert 3 ist nicht bekannt.) finde den y-Wert der oberen Kante, gibt es eine Lösung, um die Punkte am oberen Rand des Graphen in ggplot2 zu erzwingen?

+3

können Sie 'Inf' verwenden, aber das wird lebe wirklich am Rande. Andernfalls müssen Sie das Plot erstellen ('ggplot_build') und das Skalierungslimit von dort extrahieren. – baptiste

+0

Wow, ich habe nicht darüber nachgedacht. Es ist nicht zu schön, aber kann gut genug sein :-) –

+0

Ich weiß weitgehend über '' 'ggplot_build''' aber das würde die nette' '' marking() '' 'Funktion töten. Ich kann auch '' 'Ylim''' basierend auf den Daten setzen (' '' 3: 1''' in diesem Beispiel), aber in diesem Fall muss ich es separat berechnen und zu '' 'markings''' gehen . Ich denke, dass es eine Möglichkeit geben kann, ggplot entweder zu sagen, dass er y nicht transformiert oder vielleicht zu den darunter liegenden Rasterzeichnungswerkzeugen springt. –

Antwort

0

Ich denke, die beste Option ist, geom_rug zu verwenden. Sorry, ich bin noch nicht ganz in der ggplot Art und Weise zu denken ...

d <- data.frame(x=1:3, y=3:1) 
markings <- function() { 
    d2 <- data.frame(x=c(1.5,2.5)) 
    geom_rug(data=d2, aes(x=x), col="red", sides="t") 
} 
ggplot(data=d) + geom_point(aes(x=x, y=y)) + markings() 

Close to what I wanted--using <code>geom_rug()</code>

Danke Jungs für die Hilfe :-)