J'ai quelques données qui ressemblent à ceci: https://imgur.com/a/UK64GCp
Et je le trace en utilisant:
plot(fifty_twoweekmovavg) pdf("52_week_moving_average_chartNSW.pdf",onefile=TRUE) addLegend("topleft",lty = 1,cex=1.2) dev.off()
Comment puis-je le tracer de manière à n'inclure que quelques variables? Par exemple. tracer le prix NSW et le prix du charbon en fonction du temps, plutôt que de tracer chaque variable en fonction du temps?
Merci
Exemple reproductible:
NSW1.Prix Noir.Coal Gas Hydro Liquid.Fuel
01/01/2011 30.89336 32.33668 41.63653 69.82661 108.06855
08/01/2011 30.98103 32.24805 41.33295 69.44308 104.36587
15/01/2011 30.73076 32.11497 40.76273 69.59129 97.30812
22/01/2011 30,76028 30,50381 36,56215 62,50329 61,78828
29/01/2011 29.76733 34.65090 43.94289 93.20954 113.42410
Edit2, Comment j'ai créé des données:
mydata = read.csv (fichier = "nem_tech_dataTAS.csv")
bibliothèque (xts)
bibliothèque (zoo)
date
Edit3, format de la légende:
3 Réponses :
Si vous souhaitez tracer deux lignes qui montrent les valeurs de gaz et d'hydro au fil du temps, vous devez d'abord créer une série chronologique. Créez une colonne qui récupère la date et la transforme au format Date en utilisant as.Date
. Dans votre exemple ci-dessus, vous écririez:
plot(fifty_twoweekmovavg$date,fifty_twoweekmovavg$Gas,type='l',ylim=extents) lines(fifty_twoweekmovavg$date,fifty_twoweekmovavg$Hydro,col='red')
Cela vous donne les valeurs de votre axe x.
Maintenant, pour obtenir à la fois vos valeurs de gaz et d'hydro, vous devez faire assurez-vous que l'axe des y correspond aux deux car les valeurs de Gaz et d'Hydro ne se croisent pas.
Une façon de procéder est de:
extents=range(c(fifty_twoweekmovavg$Gas,fifty_twoweekmovavg$Hydro))
Une fois que vous avez défini votre date et votre étendue, vous pouvez enfin tracer vos lignes:
fifty_twoweekmovavg$date=as.Date(rownames(fifty_twoweekmovavg))
merci mais quand je fais votre première ligne, j'obtiens ceci: > cinquante_twoweekmovavg $ date = as.Date (rownames (cinquante_twoweekmovav g)) Erreur dans as.Date.default (x, ...): ne sais pas comment pour convertir 'x' en classe "Date"
Pouvez-vous essayer str (cinquante_twoweekmovavg)
et copier et coller ce que vous obtenez.
Un objet 'xts' du 2011-01-01 / 2018-12-29 contenant: Data: num [1: 418, 1: 6] 30.9 30.9 30.7 30.6 30.6 ... - attr (*, "dimnames" ) = Liste de 2 .. $: NULL .. $: chr [1: 6] "TAS1.Price" "Gas" "Hydro" "Liquid.Fuel" ... Indexé par objets de classe: [POSIXct, POSIXt] Attributs TZ: xts: NULL
Ah, pouvez-vous montrer le code que vous avez utilisé pour créer l'objet XTS? Cette question peut vous être utile.
oui c'est dans la question originale maintenant
Essayez ceci: cinquante_twoweekmovavg_xts = cinquante_twoweekmovavg
puis cinquante_twoweekmovavg = data.frame (date = index (cinquante_twoweekmovav g), cinquante_twoweekmovavg, row.names = NULL)
. Vous aurez toujours votre ancien objet XTS mais cela vous permettra de tracer en base à l'aide d'un bloc de données. Si vous voulez vraiment tracer l'objet XTS, regardez dans plot.zoo. Voici un exemple .
Le code ci-dessous peut rendre un tracé avec plusieurs lignes avec la légende du graphique.
df2 = data.frame(matrix(data=c( 30.89336, 32.33668, 41.63653, 69.82661, 108.06855, 30.98103, 32.24805, 41.33295, 69.44308, 104.36587, 30.73076, 32.11497, 40.76273, 69.59129, 97.30812, 30.76028, 30.50381, 36.56215, 62.50329, 61.78828, 29.76733, 34.65090, 43.94289, 93.20954, 113.42410 ), ncol = 5, byrow = TRUE )) colnames(df2) = c("NSW1.Price", "Black.Coal", "Gas", "Hydro", "Liquid.Fuel") df1 = data.frame("time" = as.Date( c("2011-01-01", "2011-01-08", "2011-01-15", "2011-01-22", "2011-01-29"),"%Y-%m-%d")) df = cbind(df1, df2) plot(0, cex=0, xlim=range(df$time), ylim=c(0,max(c(df$NSW1.Price, df$Black.Coal)))) lines(df$time, df$NSW1.Price, col="cyan", lty = 1) lines(df$time, df$Black.Coal, col="black", lty=2) legend("bottomleft", legend = c("NSW1.Price", "Black.Coal"), col = c("cyan", "black"), lty = c(1,2))
Le traçage des objets xts peut être fait avec la commande plot si le package xts
a été chargé. Pour plus de détails sur la façon de tracer des objets xts, utilisez ? Plot.xts
.
Pour sélectionner seulement 2 colonnes, vous pouvez utiliser grep
à l'intérieur de l'objet xts.
plot(fifty_twoweekmovavg[, grep("NSW1|Coal", names(fifty_twoweekmovavg))], main = "52_week_moving_average") # on = 1 is for main plot. lty is for showing a line in the legend. # see ?addLegend and ?legend addLegend("topleft", on = 1, lty=1)
modifier: manipuler la légende, cela facilite les choses et aboutira au même tracé, mais avec des lignes pour la légende au lieu de carrés:
library(xts) plot(fifty_twoweekmovavg[, grep("NSW1|Coal", names(fifty_twoweekmovavg))], legend(grep("NSW1|Coal", names(fifty_twoweekmovavg))), main = "52_week_moving_average", legend.loc = "topleft")
Oh super, je vais essayer ça
Fonctionne parfaitement merci, même si je ne comprends pas complètement comment fonctionne "grep"
Une chose mineure, mais j'aimerais y remédier si je peux, c'est le format de la légende. En utilisant votre code, ma légende a une case indiquant chaque couleur, où à l'origine j'avais une ligne indiquant chaque couleur. J'ai édité ma question ci-dessus pour illustrer cela. Comment mettre en forme la légende avec le format de ligne plutôt que le format de votre boîte? Merci!
essayez d'utiliser
ggplot
pour le traçagetracé (cinquante_twoweekmovavg $ Gas, cinquante_twoweekmovavg $ Hydro)
Quand je fais cela, il ne trace que les données de gaz et non les données d'hydro?
Avez-vous regardé les fonctions
lines
oumatplot
?J'ai essayé des lignes, mais je n'arrive pas à le faire fonctionner avec ma légende? Pourrais-tu m'aider
pdf
doit être avantplot
. Jetez également un œil à Comment faire un excellent R exemple reproductible , il nous aidera à vous aider tous.Exemple reproductible en question maintenant (je l'ai édité).
Probablement bon de mentionner que mes données sont un objet 'xts'