2012-05-10 4 views
1

je tracer des valeurs ici sur la longueur d'un chromosomediagramme de dispersion avec la ligne de loess, loess pour ne pas montrer la ligne dans une région donnée

enter image description here

La région médiane sans point ne contient aucune donnée et ne doit pas obtenir un loess ligne. Comment puis-je modifier mon code pour arrêter la ligne de loess sur cette région? Les données sont continues mais je pourrais ajouter des lignes pour marquer la région vide avec une valeur spéciale ou ajouter une colonne avec un label ?? mais comment l'utiliser dans la commande?

ma commande en cours:

library(IDPmisc) 

# plot settings (edit here) 
spanv<-0.05 
pointcol1="#E69F00" 
pointcol2="#56B4E9" 
pointcol3="#009E73" 
points=20 
linecol="green" 
xlabs=paste(onechr, " position", " (loess-span=", spanv, ")", sep="") 

data1<-NaRV.omit(data[,c(2,7)]) # keep only x and y for the relevant data 
           # and clean NA and Inf 
ylabs='E/A - ratio' 
p1<-ggplot(data1, aes(x=start, y=E.R)) + 
ylim(0,5) + 
geom_point(shape=points, col=pointcol1, na.rm=T) + 
geom_hline(aes(yintercept=1, col=linecol)) + 
geom_smooth(method="loess", span=spanv, fullrange=F, se=T, na.rm=T) + 
xlab(xlabs) + 
ylab(ylabs) 

Répondre

5

je ferais une des deux choses:

  1. Est-ce que le loess() montage à l'extérieur de ggplot(), prévoir pour les deux régions séparément et ajouter chaque ensemble de prédictions l'intrigue avec sa propre couche geom_line().
  2. Semblable à ce qui précède, mais cette fois dans ggplot() domaine d'opérations. Ajouter deux couches à l'intrigue, pas un, à la fois en utilisant geom_smooth(), mais surtout changer l'argument data fourni à chacun pour se référer à seulement l'une ou l'autre partie des données.

Pour ce dernier, peut-être quelque chose comme:

.... 
geom_smooth(data = data[1:n, ], method="loess", span=spanv, fullrange=FALSE, 
      se=TRUE, na.rm=TRUE) + 
geom_smooth(data = data[m:k, ], method="loess", span=spanv, fullrange=FALSE, 
      se=TRUE, na.rm=TRUE) 
.... 

n et m et k se réfèrent aux indices qui marquent la fin de la série 1 et le début et la fin de série 2 et qui doivent être défini ou fourni par vous directement.

+0

merci beaucoup pour la réponse. Je vais essayer ceci (le 2ème est plus joli) – splaisan

+0

Le premier est plus agréable car il n'implique qu'un seul appel à 'loess()' et suit de très près le graphique original que vous montrez. Pour les objets 'data' séparés dans' geom_smooth() ', réalisez que le second LOESS n'a pas besoin d'être le même que l'ajustement donné pour le LOESS appliqué à l'ensemble de données complet (effets de bord, etc.). L'option 1 est préférable à mon esprit car elle devrait être le même modèle que celui de 'ggplot()', vous tracez juste les bits que vous vouliez. –

+1

@splaisan Une troisième option vient à l'esprit. Faites comme option 1 mais prédisez pour toute la gamme de données. Ensuite, placez tous les points dans le "gap" à "NA". Tracez ensuite le vecteur de points prévu dans une seule couche. Ce serait un autre moyen idéal d'aller avant de choisir les options 2. –

Questions connexes