2009-11-19 9 views
4

J'essaye d'ajouter une ligne à une intrigue de points, et je ne peux pas la comprendre. Mes valeurs y sont des nombres de 0 à Inf, tandis que mes valeurs x proviennent d'un facteur ordonné.Ajout d'une ligne à ggplot

Voici le code de traçage, qui affiche uniquement les points:

g = ggplot() + 
    layer(data = ratesdf, mapping = aes(x = age, y = rates), geom = "point", stat="identity") + 
    layer(data = ratesdf, mapping = aes(x = age, y = rates), geom = "smooth", stat = "smooth", method = loess) 
print(g) 

Voici le dataframe:

  rates  age 
[0,5) 0.00000000 [0,5) 
[5,10) 0.00000000 [5,10) 
[10,15) 0.00000000 [10,15) 
[15,20) 0.02017059 [15,20) 
[20,25) 0.32707402 [20,25) 
[25,30) 0.54013169 [25,30) 
[30,35) 0.71698958 [30,35) 
[35,40) 0.81120944 [35,40) 
[40,45) 0.87283637 [40,45) 
[45,50) 0.91411649 [45,50) 
[50,55) 0.91273334 [50,55) 
[55,60) 0.95627322 [55,60) 
[60,65) 0.92879819 [60,65) 
[65,70) 0.98088779 [65,70) 
[70,75) 0.90406674 [70,75) 
[75,80) 1.00000000 [75,80) 
[80,85) 1.00000000 [80,85) 
[85,Inf] 1.00000000 [85,Inf] 

Merci à tout le monde à l'avance!

(Hadley, je promets d'acheter votre livre dès que je reçois mes chèques-cadeaux annuels d'anniversaire :))

+0

Il est difficile de dire sans dataframe reproductible. Est-ce que l'âge de type "facteur", ou autre chose? Cette notation mathématique pour un intervalle n'est pas quelque chose que j'ai vu auparavant dans R ... – Harlan

+0

Jetez un oeil à cette question connexe: http://stackoverflow.com/questions/1476185/how-to-overlay-a-line- pour-un-lm-objet-sur-un-ggplot2-scatterplot. – Shane

+0

L'âge de la colonne est un facteur ordonné, en utilisant le résultat par défaut de la coupe comme les étiquettes. – forkandwait

Répondre

3

Vous devez spécifier manuellement groupe = 1 car par défaut les groupes ggplot2 par la combinaison de tous catégoriques variables sur l'intrigue.

0

Je ne suis pas sûr si j'ai manqué ce que vous essayez de faire, mais vous voulez essentiellement une fonction d'étape. Par exemple:

rates = c(0.00000000 ,0.00000000 ,0.00000000 ,0.02017059 ,0.32707402, 0.54013169 ,0.71698958 ,0.81120944 ,0.87283637 ,0.91411649 ,0.91273334 ,0.95627322 ,0.92879819 ,0.98088779 ,0.90406674 ,1.00000000 ,1.00000000, 1.00000000) 
age = seq(0, 85, 5) 

#ReJig the variables 
r2 = sort(rep(rates,2));r2 = r2[1:(length(r2)-1)] 
a = sort(rep(age,2));a = a[2:(length(a))] 

library(ggplot2) 
ggplot() + geom_line(aes(x=a, y=r2)) 

HTH