如何绘制 R [xts] 中的某些列?
How to plot certain columns in R [xts]?
我有一些数据如下所示:
https://imgur.com/a/UK64GCp
我正在使用以下方法绘制它:
plot(fifty_twoweekmovavg)
pdf("52_week_moving_average_chartNSW.pdf",onefile=TRUE)
addLegend("topleft",lty = 1,cex=1.2)
dev.off()
如何绘制它以便只包含几个变量?
例如。绘制新南威尔士州价格和煤炭价格与时间的关系图,而不是绘制每个变量与时间的关系图?
谢谢
可重现的例子:
NSW1.Price Black.Coal Gas Hydro Liquid.Fuel
2011-01-01 30.89336 32.33668 41.63653 69.82661 108.06855
2011-01-08 30.98103 32.24805 41.33295 69.44308 104.36587
2011-01-15 30.73076 32.11497 40.76273 69.59129 97.30812
2011-01-22 30.76028 30.50381 36.56215 62.50329 61.78828
2011-01-29 29.76733 34.65090 43.94289 93.20954 113.42410
Edit2,我是如何创建数据的:
mydata=read.csv(file="nem_tech_dataTAS.csv")
library(xts)
library(zoo)
date <- seq(from=as.POSIXct("2010-01-01 00:30", format = "%Y-%m-%d %H:%M"), length.out = nrow(mydata), by = "30 min")
mydata_dated <- xts(mydata, date)
fifty_twoweekmovavg=rollapply(mydata_dated,17520,mean,by = 336,na.pad = FALSE)
Edit3,图例格式:
当前图例:
所需图例:
如果您想绘制两条线来显示随时间变化的天然气和水电值,您首先需要创建一个时间序列。创建一个获取日期的列,并使用 as.Date
将其转换为日期格式。在你上面的例子中,你会写:
fifty_twoweekmovavg$date=as.Date(rownames(fifty_twoweekmovavg))
这会得到你的 x 轴值。
现在,为了同时获得 Gas 和 Hydro 值,您必须确保 y 轴适合它们,因为 Gas 和 Hydro 的值不相交。
一种方法是:
extents=range(c(fifty_twoweekmovavg$Gas,fifty_twoweekmovavg$Hydro))
设置日期和范围后,您最终可以继续绘制线条:
plot(fifty_twoweekmovavg$date,fifty_twoweekmovavg$Gas,type='l',ylim=extents)
lines(fifty_twoweekmovavg$date,fifty_twoweekmovavg$Hydro,col='red')
下面的代码可以渲染带有图例的多行图。
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))
如果已加载包 xts
,则可以使用 plot 命令绘制 xts 对象。有关如何绘制 xts 对象的更多详细信息,请使用 ?plot.xts
.
至select 只有 2 列您可以在 xts 对象内使用 grep
。
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")
编辑:
操纵图例,这使它更容易,并且会产生相同的情节,但图例用线条而不是正方形:
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)
我有一些数据如下所示: https://imgur.com/a/UK64GCp
我正在使用以下方法绘制它:
plot(fifty_twoweekmovavg)
pdf("52_week_moving_average_chartNSW.pdf",onefile=TRUE)
addLegend("topleft",lty = 1,cex=1.2)
dev.off()
如何绘制它以便只包含几个变量? 例如。绘制新南威尔士州价格和煤炭价格与时间的关系图,而不是绘制每个变量与时间的关系图?
谢谢
可重现的例子:
NSW1.Price Black.Coal Gas Hydro Liquid.Fuel
2011-01-01 30.89336 32.33668 41.63653 69.82661 108.06855
2011-01-08 30.98103 32.24805 41.33295 69.44308 104.36587
2011-01-15 30.73076 32.11497 40.76273 69.59129 97.30812
2011-01-22 30.76028 30.50381 36.56215 62.50329 61.78828
2011-01-29 29.76733 34.65090 43.94289 93.20954 113.42410
Edit2,我是如何创建数据的:
mydata=read.csv(file="nem_tech_dataTAS.csv")
library(xts)
library(zoo)
date <- seq(from=as.POSIXct("2010-01-01 00:30", format = "%Y-%m-%d %H:%M"), length.out = nrow(mydata), by = "30 min")
mydata_dated <- xts(mydata, date)
fifty_twoweekmovavg=rollapply(mydata_dated,17520,mean,by = 336,na.pad = FALSE)
Edit3,图例格式:
当前图例:
所需图例:
如果您想绘制两条线来显示随时间变化的天然气和水电值,您首先需要创建一个时间序列。创建一个获取日期的列,并使用 as.Date
将其转换为日期格式。在你上面的例子中,你会写:
fifty_twoweekmovavg$date=as.Date(rownames(fifty_twoweekmovavg))
这会得到你的 x 轴值。
现在,为了同时获得 Gas 和 Hydro 值,您必须确保 y 轴适合它们,因为 Gas 和 Hydro 的值不相交。
一种方法是:
extents=range(c(fifty_twoweekmovavg$Gas,fifty_twoweekmovavg$Hydro))
设置日期和范围后,您最终可以继续绘制线条:
plot(fifty_twoweekmovavg$date,fifty_twoweekmovavg$Gas,type='l',ylim=extents)
lines(fifty_twoweekmovavg$date,fifty_twoweekmovavg$Hydro,col='red')
下面的代码可以渲染带有图例的多行图。
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))
如果已加载包 xts
,则可以使用 plot 命令绘制 xts 对象。有关如何绘制 xts 对象的更多详细信息,请使用 ?plot.xts
.
至select 只有 2 列您可以在 xts 对象内使用 grep
。
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")
编辑: 操纵图例,这使它更容易,并且会产生相同的情节,但图例用线条而不是正方形:
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)