用单列转换为data.frame后在ggplot中进行绘图吗?

时间:2019-02-14 22:06:55

标签: r ggplot2

我正在尝试将一些简单的数据转换为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更好,所以我尝试了。

有什么建议吗?

1 个答案:

答案 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中您同时拥有aesaes_()的原因。前者是非标准评估,而后者是标准评估。此外,还有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进行绘图很有帮助。