Frage

Mit ggplot2 ich mehrere Funktionen und eine Reihe von Punkten am Plotten. Ich kann nicht herausfinden, wie die Punkte auf der Legende zu vertreten. Ich weiß, ich brauche eine aes () Funktion verwenden, aber ich verstehe nicht ganz, wie dies zu tun. Ich entschuldige mich, dass das Beispiel so lang ist, aber ich weiß nicht, wie ich es anders darzustellen.

## add ggplot2
library(ggplot2)

# Declare Chart values
y_label = expression("y_axis"~~bgroup("(",val / km^{2},")"))
x_label = "x_axis"

#############################
## Define functions
# Create a list to hold the functions
funcs <- list()
funcs[]

# loop through to define functions
for(k in 1:21){

# Make function name
funcName <- paste('func', k, sep = '' )

# make function
func = paste('function(x){exp(', k, ') * exp(x*0.01)}', sep = '')

funcs[[funcName]] = eval(parse(text=func))

}

    # Specify values
    yval = c(1:20)                              
    xval = c(1:20)                                

    # make a dataframe
    d = data.frame(xval,yval)

    # Specify Range
    x_range <- range(1,51)

# make plot
p <-qplot(data = d,
        x=xval,y=yval,        
        xlab = x_label, 
        ylab = y_label,
        xlim = x_range
        )+ geom_point(colour="green")


for(j in 1:length(funcs)){

p <- p + stat_function(aes(y=0),fun = funcs[[j]], colour="blue", alpha=I(1/5))

}

# make one function red
p <- p + stat_function(fun = funcs[[i]], aes(color="red"), size = 1) +
    scale_colour_identity("", breaks=c("red", "green","blue"),
    labels=c("Fitted Values", "Measured values","All values")) 

# position legend and make remove frame
p <- p + opts(legend.position = c(0.85,0.7), legend.background = theme_rect(col = 0)) 

print(p)     

Vielen Dank im Voraus - ich gelernt habe ich viel von dieser Gemeinschaft über die letzten Tage

.
War es hilfreich?

Lösung

Siehe unten für eine Lösung. Die Grundidee ist folgende: die Punkte vorstellen, eine unsichtbare Linie unter ihnen haben, und die Linien mit unsichtbaren Punkten. So wird jede „Reihe“ bekommt Farbe und Form und Linientyp Attribute, und am Ende werden wir sie manuell unsichtbare Werte (0 für Linien, NA für Punkte) wie nötig. ggplot2 werden die Legenden für die drei Attribute automatisch zusammenführen.

# make plot 
p <- qplot(data = d, x=xval, y=yval, colour="Measured", shape="Measured",
          linetype="Measured",  xlab = x_label,   ylab = y_label, xlim = x_range,
          geom="point") 

#add lines for functions 
for(j in 1:length(funcs)){ 
   p <- p + stat_function(aes(colour="All", shape="All", linetype="All"), 
                          fun = funcs[[j]],  alpha=I(1/5), geom="line")  
} 

# make one function special 
p <- p + stat_function(fun = funcs[[1]], aes(colour="Fitted", shape="Fitted",
                       linetype="Fitted"), size = 1, geom="line")

# modify look 
 p <- p +  scale_colour_manual("", values=c("green", "blue", "red")) + 
           scale_shape_manual("", values=c(19,NA,NA)) + 
           scale_linetype_manual("", values=c(0,1,1)) 

print(p) 

Andere Tipps

Zur Einstellung der Farb Ästhetik für jede geom auf einen konstanten helfen kann. Hier ist ein kleines Beispiel:

require(ggplot2)
set.seed(666)
N<-20
foo<-data.frame(x=1:N,y=runif(N),z=runif(N))
p<-ggplot(foo)
p<-p+geom_line(aes(x,y,colour="Theory"))
p<-p+geom_point(aes(x,z,colour="Practice"))

#Optional, if you want your own colours
p<-p+scale_colour_manual("Source",c('blue','red'))

print(p)

Dies ist nicht nativ in ggplot2 unterstützt, aber ich hoffe, ich werde herausfinden, wie für eine zukünftige Version.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top