Je suis un débutant en R/ggplot. Je voudrais créer un graphique géom_ligne d'une série temporelle à variable continue, puis ajouter une couche composée d'événements. La variable continue et ses horodatages sont stockés dans un data.frame, les événements et leurs horodatages sont stockés dans un autre data.frame.
Ce que je voudrais vraiment J'aimerais faire quelque chose comme les graphiques sur finance.google.com. Dans ces graphiques, la série temporelle est le prix des actions et il y a des "drapeaux" pour indiquer les nouveaux événements. Je ne suis pas en train de tracer des trucs financiers, mais le type de graphique est similaire. J'essaie de tracer des visualisations de données de fichiers journaux. Voici un exemple de ce que je veux dire...
Si cela est conseillé ( ?), je voudrais utiliser des data.frames séparés pour chaque couche (un pour les observations de variables continues, un autre pour les événements).
Après quelques essais et erreurs, je n'ai pas pu faire mieux. Ici, j'utilise des exemples de données provenant de jeux de données fournis avec ggplot. Le jeu "economics" contient des données de séries temporelles que j'aimerais tracer et le jeu "presidential" contient quelques événements (élections présidentielles).
library(ggplot2)
data(presidential)
data(economics)
presidential <- presidential[-(1:3),]
yrng <- range(economics$unemploy)
ymin <- yrng[1]
ymax <- yrng[1] + 0.1*(yrng[2]-yrng[1])
p2 <- ggplot()
p2 <- p2 + geom_line(mapping=aes(x=date, y=unemploy), data=economics , size=3, alpha=0.5)
p2 <- p2 + scale_x_date("time") + scale_y_continuous(name="unemployed [1000's]")
p2 <- p2 + geom_segment(mapping=aes(x=start,y=ymin, xend=start, yend=ymax, colour=name), data=presidential, size=2, alpha=0.5)
p2 <- p2 + geom_point(mapping=aes(x=start,y=ymax, colour=name ), data=presidential, size=3)
p2 <- p2 + geom_text(mapping=aes(x=start, y=ymax, label=name, angle=20, hjust=-0.1, vjust=0.1),size=6, data=presidential)
p2
Questions :
-
Cela ne pose pas de problème pour les événements très rares, mais s'il y a un groupe d'événements (comme c'est souvent le cas dans un fichier journal), cela devient désordonné. Existe-t-il une technique permettant d'afficher proprement un ensemble d'événements survenant dans un court intervalle de temps ? Je pensais à position_jitter, mais j'ai eu beaucoup de mal à aller aussi loin. google charts empile ces "drapeaux" d'événements les uns sur les autres s'il y en a beaucoup.
-
En fait, je n'aime pas coller les données d'événement dans la même échelle que l'affichage des mesures continues. Je préférerais les mettre dans une grille de facettes. Le problème est que les facettes doivent toutes provenir du même data.frame (je ne sais pas si c'est vrai). Si c'est le cas, cela ne semble pas non plus idéal (ou peut-être que j'essaie juste d'éviter d'utiliser reshape ?).
7 votes
Intrigue intéressante : ne vous attendez pas à trouver un emploi après l'arrivée au pouvoir d'un président républicain !
0 votes
C'était juste les données les plus pratiques et les plus disponibles à utiliser comme exemple - mais oui, ça fait réfléchir :-)