我正在尝试将一些简单的数据转换为ggplot2可以接受的形式。
我获取一些简单的股票数据,现在我只想作图,后来我想作图说一个10天移动平均线或一个30天历史波动率期,这就是我正在使用ggplot的原因。
我认为它可以像这样的伪代码行
ggplot(主数据)+ geom_line(移动平均值)+ geom_line(30dayvol)
library(quantmod)
library(ggplot2)
start = as.Date("2008-01-01")
end = as.Date("2019-02-13")
start
tickers = c("AMD")
getSymbols(tickers, src = 'yahoo', from = start, to = end)
closing_prices = as.data.frame(AMD$AMD.Close)
ggplot(closing_prices, aes(y='AMD.Close'))
但是我什至无法解决这个问题。当然,问题似乎是我没有x轴。我如何告诉ggplot使用索引列作为。这行不通吗?我是否必须创建一个新的“日期”或“日期”列?
例如使用Regular R绘图功能的这行效果很好
plot.ts(closing_prices)
这种方法不需要我输入硬的x轴即可生成一个图形,但是我还没有弄清楚如何将其他线条叠加到同一图形上,显然ggplot更好,所以我尝试了。
有什么建议吗?
答案 0 :(得分:1)
as.Date(rownames(df))
将为您获取行名并将其解析为日期。您还需要指定一个geom_line()
library(quantmod)
library(ggplot2)
start = as.Date("2008-01-01")
end = as.Date("2019-02-13")
start
tickers = c("AMD")
getSymbols(tickers, src = 'yahoo', from = start, to = end)
closing_prices = as.data.frame(AMD$AMD.Close)
ggplot(closing_prices, aes(x = as.Date(rownames(closing_prices)),y=AMD.Close))+
geom_line()
以为与答案相比,在答案中进行解释会更容易。
ggplot和dplyr有两种评估方法。标准和非标准评估。这就是为什么在ggplot中您同时拥有aes
和aes_()
的原因。前者是非标准评估,而后者是标准评估。此外,还有aes_string()
也是标准评估。
这些有何不同?
当我们探索所有方法时,很容易看到
#Cleaner to read, define every operation in one step
#Non Standard Evaluation
closing_prices%>%
mutate(dates = as.Date(rownames(.)))%>%
ggplot()+
geom_line(aes(x = dates,y = AMD.Close))
#Standard Evaluation
closing_prices%>%
mutate(dates = as.Date(rownames(.)))%>%
ggplot()+
geom_line(aes_(x = quote(dates),y = quote(AMD.Close)))
closing_prices%>%
mutate(dates = as.Date(rownames(.)))%>%
ggplot()+
geom_line(aes_string(x = "dates",y = "AMD.Close"))
为什么做同一件事的方法这么多?在大多数情况下,可以使用非标准评估。但是,如果我们要将这些图包装在函数中,并根据作为字符串传递的函数参数将列动态更改为图。使用aes_
和aes_string
进行绘图很有帮助。