12
votes

Balance de couleur GGPLot2 sur les valeurs aberrantes

J'ai des difficultés avec quelques valeurs aberrantes rendant l'échelle de couleur inutile.

Mes données ont une variable de longueur basée dans une plage, mais aura généralement quelques valeurs beaucoup plus grandes. L'exemple ci-dessous des données contient 95 valeurs comprises entre 500 et 1500 et 5 valeurs de plus de 50 000. Les légendes de couleurs résultantes ont tendance à utiliser 10k, 20k, ... 70k pour la couleur change lorsque je veux voir des changements de couleur entre 500 et 1500. Vraiment, tout ce qui est sur environ 1300 devrait être la même couleur unie (probablement médiane +/- MAD ), mais je ne sais pas où définir ça. P>

Je suis ouvert à n'importe quelle solution GGPLOT, mais des valeurs idéalement inférieures seraient rouges, blanches moyennes et bleu plus élevées (basse est mauvaise). Dans mon propre jeu de données, la date est une date réelle avec AS.posixcct () dans le GGPLOT AES (), mais ne semble pas affecter l'exemple. P>

#example data
date <- sample(x=1:10,size=100,replace=T)
stateabbr <- sample(x=1:50,size=100,replace=T)
Length <- c(sample(x=500:1500,size=95,replace=T),60000,55000,70000,50000,65000)
x <- data.frame(date=date,stateabbr=stateabbr,Length=Length)

#main plot
(g <- ggplot(data=x,aes(x=date,y=factor(stateabbr))) +
  geom_point(aes(color=as.numeric(as.character(Length))),alpha=3/4,size=4) + 
  #scale_x_datetime(labels=date_format("%m/%d")) + 
  opts(title="Date and State") + xlab("Date") + ylab("State"))

#problem
g + scale_color_gradient2("Length",midpoint=median(x$Length))


3 commentaires

Ma solution de contournement a été d'utiliser une échelle de journalisation (ou quelque chose comme elle) pour la coloration lorsque j'ai des valeurs aberrantes. Cependant, j'aimerais savoir s'il y a une meilleure façon!


Ouais, j'avais essayé ça, mais c'est toujours hors de cet exemple. Espérons qu'une meilleure façon apparaisse!


Vous pouvez utiliser? Coupe, pour créer une autre variable à vos pauses préférées, puis définissez la couleur couleur = esthétique sur cette variable.


3 Réponses :


6
votes

de mon commentaire, voir? Couper

x$colors <- cut(x$Length, breaks=c(0,500,1000,1300,max(x$Length)))

g <- ggplot(data=x,aes(x=date,y=factor(stateabbr),color=colors)) +
    geom_point() + 
    opts(title="Date and State") + 
    xlab("Date") + 
    ylab("State")


2 commentaires

Dans ce cas, je devrais fournir des couleurs "à la recherche continues" à une variable discrète avec échelle_color_manual, non? Je reçois une coloration discrète, ce qui n'est pas mauvais, juste une observation.


Oui, adapter à votre question initiale (rouge -> blanc -> bleu). Essayez quelque chose comme + échelle_colour_manual (valeurs = C ("rouge", "blanc", "bleu")). Voyez ici pour des palettes plus efficaces: LearnR.WordPress.com/ 2009/04/15 / ... Je pense que la désignation des palettes Colourspace serait probablement en fonction de vos besoins. Rappelez-vous simplement que vous avez besoin d'une couleur pour chaque pause que vous créez avec la coupe. Il n'est pas difficile de le simuler afin qu'il "semble" continu, avec un peu d'usage de pellette intelligent.



9
votes

Voici une option légèrement délicate: xxx

Entrez la description de l'image ici

donc la partie délicate ici utilise remplir sur des points, afin de convaincre GGPLOT de faire une autre légende. Vous pouvez évidemment personnaliser cela avec différentes étiquettes et couleurs pour l'échelle de remplissage.

Une dernière chose, lisant la réponse de Brandon. Vous pouvez en principe combiner à la fois les deux approches en prenant les valeurs périphériques, en utilisant couper pour créer une variable catégorique distincte pour eux, puis utilisez mon truc avec la balance remplir . De cette façon, vous pouvez indiquer plusieurs groupes de points périphériques.


0 commentaires

3
votes

Débarrassez-vous des valeurs aberrantes. Rapide et sale, je sais, mais je pense que cela valait la peine de dire. Vous pouvez toujours les décrire dans votre texte. Pourquoi les laisser ruiner vos analyses et vos graphiques?

Il y a un papier référencé dans ce livre de blog qui traite de suppression éthiquement des valeurs aberrantes:

http: / /psuc2f.wordpress.com/2011/10/14/is-it-Dishonest-or-unéthical-a-remove-Outliers/

Un autre moyen simple de traiter avec eux serait de les casser:

valeur DF $ [valeur df $> 1300] = 1300

Encore une fois, vous pouvez décrire que vous l'avez fait dans le texte ou même simplement éditer la balance pour dire 1300+ au lieu de 1300


0 commentaires