J'ai des données qui sont contraintes en dessous d'une ligne 1: 1. Je voudrais démontrer cela sur une parcelle en ombrant légèrement la zone au-dessus de la ligne, pour attirer l'attention du spectateur dans la zone située sous la ligne.
J'utilise mais pour la vie de moi, ne peut pas comprendre Comment facilement ombrager la zone ci-dessus sans tracer un objet séparé. Y a-t-il une solution facile pour cela? P> OK, JOnan, voici un exemple de jeu de données: P> qplot code> pour générer les graphiques . Rapidement, j'ai; p>
qplot (x, y) + geom_abline (pente = 1) code> p>
ggplot(df,aes(x,y,color=var1))+
facet_wrap(~var2)+
geom_abline(slope=1,intercept=0,lwd=0.5)+
geom_point(size=3)+
scale_color_manual(values=c("red","blue"))+
geom_polygon(data=df_poly,aes(x,y),fill="blue",alpha=0.2)
3 Réponses :
Autant que je sache, il n'y a pas d'autre solution autre que de créer un polygone avec un remplissage alpha-mélangé. Par exemple: p> p>
Les choses sont beaucoup plus compliquées si la ligne ne fonctionne pas du coin au coin, ce qui est susceptible de se produire si la ligne si elle est tracée sur un autre ensemble de données. J'ai bricolé un peu mais je ne pouvais pas venir avec une solution générale.
La solution générale doit être le long des lignes telles que décrites dans Stackoverflow.com/Questtions/6786982/...
Merci pour vos solutions! J'ai essayé Andrie, mais j'ai précisé que les points sont colorés par une troisième variable qplot (x, y, couleur = z) code>, qui ne joue pas bien avec le
geom_polygon () code> déclaration. La ligne est également asymétrique inférieure à celle d'origine que je ne peux pas comprendre. Des idées?
Le paramètre couleur code> contrôle généralement la couleur de la ligne. Vous devez spécifier
remplir code> pour changer l'intérieur d'un polygone.
@jslefche j'ai reconstitué une réponse qui le fait un peu plus généralement (pour les lignes, au moins) ...
bâtiment de la réponse de @ Andrie Voici une solution générale plus (mais pas complètement) qui gère ombrage au-dessus ou au-dessous d'une ligne donnée dans la plupart des cas.
Je n'ai pas utilisé la méthode que @andrie référencée Here Depuis que je rencontrais des problèmes avec Les points doivent être dans l'ordre "correct" dans la trame de données, car Cette solution suppose que la ligne que vous traquez ne provoque pas elle-même Premièrement, voici la fonction qui construit la trame de données de polygone: p> Il attend les gammes X et Y de vos données (comme dans et voici quelques exemples des résultats. Si vous trouvez des bugs, bien sûr, laissez-moi savoir de manière à mettre à jour cette réponse ... p> p> p> p> p> mise à jour pour illustrer la solution à l'aide des données d'op de OP: P> ggplot code> La tendance à étendre automatiquement les étendues de l'intrigue lorsque vous ajoutez des points près des bords. Au lieu de cela, cela construit manuellement les points de polygone à l'aide de
inf code> et
-inf code> au besoin. Quelques notes: p>
ggplot code> parcourt le polygone dans l'ordre que les points apparaissent. Donc, il ne suffit pas d'obtenir les sommets du polygone, ils doivent être commandés (dans le sens horaire ou dans le sens inverse des aiguilles d'une montre). P> Li>
ggplot code> pour prolonger la plage de tracé. Vous verrez dans mon exemple que je choisis une ligne à dessiner en choisissant deux points dans les données et en tirant sur elles. Si vous essayez de dessiner une ligne trop loin du reste de vous,
ggplot code> modifiera automatiquement les gammes de tracé et devient difficile de prédire ce qu'ils seront. P> li >
ul>
GAMME () CODE>), la pente et l'interception de la ligne que vous allez tracer et que vous souhaitiez nuire au-dessus ou en dessous de la ligne. Voici le code que j'ai utilisé pour générer les quatre exemples suivants: p>
set.seed(1)
dat <- data.frame(x=runif(6,-2,2),y=runif(6,-2,2),
var1=rep(c("A","B"),3),var2=rep(c("C","D"),3))
#Create polygon data frame
df_poly <- buildPoly(range(dat$x),range(dat$y))
ggplot(data=dat,aes(x,y)) +
facet_wrap(~var2) +
geom_abline(slope=1,intercept=0,lwd=0.5)+
geom_point(aes(colour=var1),size=3) +
scale_color_manual(values=c("red","blue"))+
geom_polygon(data=df_poly,aes(x,y),fill="blue",alpha=0.2)
basé sur une version minimale modifiée de @ Joran's Réponse :
ggplot(data=dat,aes(x,y)) + facet_wrap(~var2) + geom_abline(slope=1,intercept=0,lwd=0.5)+ geom_point(aes(colour=var1),size=3) + scale_color_manual(values=c("red","blue"))+ geom_section(data=data.frame(slope=c(-1,1), above=c(FALSE,TRUE), selected=c("selected","selected 2")), aes(slope=slope, above=above, intercept=0, fill=selected), size=1) + expand_limits(x=3)
Merci pour une réponse assez fantastique à une ancienne question. :-)
Les points de coloriage et les polygones de remplissage sont gérés par deux esthétiques différentes (couleur et remplissage) et ne doivent pas entrer en conflit, alors je soupçonne que vous vous trompez peut-être quelque chose de mal. Je serais heureux d'aider certains autres mais je ne peux pas sans un exemple reproductible spécifique des données que vous essayez de comploter ...
Terminé. Je soupçonne que cela provient de mon inconnu avec comment GGPLot2 gère de telles choses. Merci encore pour votre aide, je l'apprécie beaucoup.
Déplacer
couleur = var1 code> à
geom_point code>:
geom_point (AES (couleur = var1), ...) code>. De plus, si vous souhaitez que différents polygones remplis de chaque facette soient conscients que vous devez créer une trame de données distincte pour chaque facette et les combiner dans un seul cadre de données comprenant le facteur
var2 code>, donc
GGPLOT code> sait lequel s'appliquer à chaque facette.
J'ai mis à jour ma réponse en utilisant vos données d'exemple; J'espère que cela pourra aider...
@ Joran - Bien sûr, merci pour toute votre aide!