2010-02-12 14 views
5

ggplot2 kullanma Çeşitli işlevleri ve bir dizi nokta çiziyorum. Efsanedeki noktaları nasıl temsil edeceğimi anlayamıyorum. Bir aes() işlevini kullanmam gerektiğini anlıyorum, ancak bunu nasıl yapacağımı tam olarak anlamıyorum. Özür dilemenin çok uzun olduğunu biliyorum, ama başka nasıl göstereceğini bilmiyorum.ggplot2 kullanma Açıklamadaki bir noktayı ve bir çizgiyi nasıl temsil edebilirim

## 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)  

Şimdiden teşekkürler - Son birkaç gündür bu topluluktan çok şey öğrendim.

cevap

8

çözüm için aşağıya bakınız. Ana fikir şu şekildedir: altlarında görünmez bir çizgi bulunan noktaları ve görünmez noktalara sahip çizgileri hayal edin. Bu yüzden her "seri" renk ve şekil ve çizgi tipi özelliklerini alır ve sonunda bunları manuel olarak görünmez değerlere (satırlar için 0, puan için NA) manuel olarak ayarlarız. ggplot2, üç öznitelik için efsaneleri otomatik olarak birleştirir.

# 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) 
+0

Tebrikler! –

+0

Teşekkür ederim - başarmak istediğim şey bu. – djq

3

Her geom için renk estetiğinin sabit olarak ayarlanması yardımcı olabilir. İşte küçük bir örnektir:

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) 

alt text http://img59.imageshack.us/img59/5460/fooplot.png

+0

Bunu hat olmadan almak mümkün mü? 'Uygulama' kategorisi için sadece efsanedeki noktaya sahip olmayı umuyordum. Teşekkürler. – djq

+0

Rengi, çizgi için eşlenmiş bir estetik yerine bir seçenek olarak ayarlayın; diğer bir deyişle, yazdırmadan önce üç satırı değiştirin: p <-p + geom_line (aes (x, y), col = 'mavi'); p <-p + geom_point (aes (x, z, color = "red")); p <-p + scale_colour_identity ("Gösterge", etiketler = "Uygulama", kesmeler = "kırmızı") –

+0

Yine de, efsanede sadece kırmızı bir nokta oluşturduğunu umduğum gibi değil. Hem "Teori" hem de "Uygulama", ama "Teori" için mavi bir çizgi ve "Uygulama" için kırmızı bir nokta istiyorum. Öneriniz için teşekkürler. – djq

1

Bu, ggplot2'de yerel olarak desteklenmez, ancak gelecekteki bir sürüm için nasıl bir yol bulacağımı umuyorum.

İlgili konular