r - 转换为具有单列的 data.frame 后在 ggplot 中绘图?
问题描述
我正在尝试将一些简单的数据转换为我认为 ggplot2 可以接受的形式。
我抓住了一些简单的股票数据,现在我只想绘制,稍后我想绘制一个 10 天移动平均线或一个 30 天历史波动期来与之配套,这就是我正在使用的 ggplot。
我认为它会像这行伪代码一样工作
ggplot(maindata)+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 使用索引列作为 a. 这行不通吗?我必须创建一个新的“日期”或“日期”列吗?
这条线例如使用Regular R plot函数就可以了
plot.ts(closing_prices)
这不需要我输入硬 x 轴并生成一个图形,但是我还没有弄清楚如何将其他线分层到同一个图形上,显然 ggplot 更好,所以我尝试了。
有什么建议吗?
解决方案
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
。
推荐阅读
- javascript - 如何在独立的 *.js 脚本中使用 js-cookie?
- sandbox - Clickatell 消息仅在消息包含单词“test”时发送
- python - 用于连接到多个网络设备并针对其运行配置运行命令的脚本
- python - 如何使用 paramiko 从远程 linux 文件中删除回车
- java - 在抽象类中初始化最终字段的最佳方法
- google-apps-script - getLastRow 但忽略 A 列和 Logger 帮助
- python - 使 Python 模块在 PyCharm 的 Ubuntu 环境中工作的问题
- mysql - pdo phpmyadmin 没有错误:每次插入都会加倍
- docker - .Net Core 5 Docker Alpine 图像连接到 Mongo Atlas DB
- hyperledger-fabric - 尝试使用 IBM VS Code 区块链扩展来运行 Hyperledger Fabric 示例