12
votes

Plusieurs lignes sont basées sur un fichier de données différent dans GGPLot2 - Coloriage et légende automatique

Supposons que j'ai les cadres de données suivants: xxx

Je veux tracer ceux-ci comme des lignes dans le même tracé / panneau. Je peux le faire par xxx

tout ce sera noir. Si je les veux dans une couleur différente, je peux spécifier la couleur explicitement comme un argument à geom_line () . Ma question est de savoir ma question puis-je spécifier une liste de quelques couleurs, disons 5 couleurs, telles que rouges, bleues, vert, orange, gris et utiliser cette liste afin que je n'ai pas à spécifier explicitement les couleurs comme argument de Geom_line () dans le cas de chaque ligne. Si l'intrigue p contient 2 déclarations geom_line (), il les colorera respectivement rouge et bleu. S'il contient 3 déclarations Geom_Line, il les colorera rouge, bleu et vert. Enfin, comment puis-je spécifier la légende pour ces parcelles. Même si je peux donner les couleurs comme un vecteur à la fin de p ce serait génial. S'il vous plaît laissez-moi savoir si la question n'est pas claire.

merci.


0 commentaires

3 Réponses :


5
votes

Ces types de questions deviennent beaucoup plus faciles à résoudre si vous ajustez votre pensée à la manière dont ggplot2 code> approche des graphiques. GGPLOT2 CODE> est organisé autour de l'idée que tout ce qui apparaît dans votre graphique devrait (en principe) exister comme une colonne de votre cadre de données. (Il existe des exceptions, bien sûr, mais c'est l'idée générale.)

Donc, votre tentative de construction de ce graphique par pièce, une ligne à la fois provenant de différentes cadres de données et alors em > Attribuer des couleurs à eux est très un- ggplot2 code> ish. Si vous souhaitez étiqueter les choses dans votre graphique avec différentes couleurs, votre première pensée devrait toujours être: P>

Comment puis-je coder cette information d'étiquetage de couleur sous forme de variable em>? p> BlockQuote>

Dans ce cas, la solution est assez simple. Simplement rbind code> vos trois cadres de données ensemble (vous devez vous assurer que les colnames correspondent d'abord) et créer une nouvelle colonne, disons GRP code> qui a trois niveaux correspondant à votre Trois cadres de données: p> xxx pré>

puis mappe em> la variable em> GRP code> au Esthétique em> couleur dans l'appel GGPLOT: p> xxx pré>

Enfin, si vous n'aimez pas les couleurs par défaut, vous pouvez spécifier votre propre utilisation de échelle_colour_manual : P>

df1 = data.frame(c1 = c(1:5), c2 = c(1:5))
df2 = data.frame(c1 = c(1:5), c2 = (c(1:5))^0.5)
df3 = data.frame(c1 = c(1:5), c2 = (c(1:5))^2)

dat <- rbind(df1,df2,df3)
dat$grp <- rep(factor(1:3),times=c(nrow(df1),nrow(df2),nrow(df3)))

ggplot(data = dat, aes(x = c1, y = c2, colour = grp)) + 
    geom_line()


0 commentaires

14
votes

GGPLOT2 fonctionne mieux si vous travaillez avec une donnée fondue.frame contenant une colonne différente pour spécifier les différentes esthétiques. La fonte est plus facile avec les noms de colonne courants, alors je commencerais là. Voici les étapes que je prends:

  • renommer les colonnes
  • Faites fondre les données qui ajoute une nouvelle variables que nous ferons mapper sur la couleur esthétique
  • Définissez votre vecteur de couleur
  • Spécifiez l'échelle appropriée avec Scale_Colour_Manual

    ' xxx

    édité pour la clarté

    la structure de NEWDATA :: xxx

    et la parcelle elle-même:

    Entrez la description de l'image ici


9 commentaires

@Chasser. Merci! Cependant, l'exemple que vous avez donné des parcelles une seule ligne, pas trois lignes différentes. Je suppose que je peux m'occuper de cela en ajoutant groupe = l1 comme argument sur AES () . Le problème avec c'est la légende. Pouvez-vous s'il vous plaît essayez? La légende n'a pas de sens. La légende a plus de trois clés dedans.


@Curious - Quelle est la structure de vos données réelles? Exécution du code ci-dessus donne trois lignes avec une légende qui fait du sens intuitif pour moi ... je vais mettre à jour ma réponse avec le STR de Newdata et donner la parcelle que je vois. Je ne sais pas pourquoi vous obtiendriez autre chose que si vos données ne sont pas représentatives de vos exemples de données. Vous pouvez forcer la L1 comme un facteur si nécessaire, cependant que cela ne devrait pas être un problème.


@Chasser. Merci pour la clarification. Pour une raison quelconque, la variable L1 dans mon cas est un int (1 1 1 1 1 2 2 2 2 etc.) et non chr . Si je corrige ça, ça marche. Maintenant, je dois savoir comment changer le titre et les noms de la légende. Merci de votre aide.


@Curious - Je peux dupliquer ces résultats si je ne donne pas les noms d'objets de liste dans l'appel à Melt () . J'ai donné à chaque data.frame un nom ... df1 = df1 , vous pouvez les nommer tout ce que vous voulez ... foo = df1, bar = df2, baz = df3 . Si vous ne les nommez pas, ils viennent d'attribuer des valeurs entières. Le titre de légende peut être modifié avec échelle_colour_manual (nom = "Yahtzee", ...) . Je définirais les noms sur ce que vous voulez lorsque vous faites fondre les données.


Merci beaucoup de clarifier cela. Maintenant je comprends ça. Une question rapide: je peux également définir le titre de légende (au moins dans ce cas) par échelle_color_hue () au lieu de échelle_color_manual () . Est-ce que l'un est meilleur que l'autre? Encore une fois, merci beaucoup.


@Chase - Je voulais juste vous faire savoir que échelle_color_manual n'a pas fonctionné? J'ai dû utiliser échelle_color_hue . Merci quand même pour l'explication sur la définition des noms d'étiquettes de clé lors de la fusion des données.


@Chase solution utile. Peut-on être adapté pour ajouter une ligne modèle intégrée à un point J'ai essayé d'adapter une technique de parcelle R () standard pour ajouter des lignes courbes (voir le lien ci-dessous: Les 2 dernières pages se rapportent) à GGPLot2 à l'aide de ce processus de fusion, mais bien sûr terminé avec des lignes représentant les données de point d'origine. Suis-je dans le mauvais sens?


@geotheory - Yep, cela ne devrait pas être très problématique du tout. GGPLOT2 a des geomes spécifiques pour des points et un autre qui correspond à un modèle de votre choix de vos données. Pour adopter les données ci-dessus pour montrer à un XY ScatterPlot avec un ABLINE à partir du modèle linéaire serait geom_point () + geom_smooth (méthode = "lm") . Découvrez le Site Web GGPLOT2 pour plus de détails sur les différentes geoms disponibles.


Vous obtenez une seule ligne si vous faites fondre une liste sans noms



8
votes

Vous n'avez pas à fondre, groupe ou rassembler. C'est assez simple. Ajoutez simplement la couleur à la geom_line xxx

 le tracé de résultat


0 commentaires