0

我正在尝试使用我在 Excel 中创建的代码在 R 中创建一个循环。我正在尝试从 Yahoo Finance 收集股票数据,想法是 R 将从 Excel 文件中读取股票名称,然后从 Yahoo Finance 收集并创建图表。

在数据框“Stocks”中,不同列中列出了 10 只不同的股票,我想运行一个循环,以便获得 10 个不同的图表。这是我用来从数据集中的第一只股票创建图表的公式。

 `Stocks %>%
ggplot(aes(x=Date, y = NOVO.B.CO.Close)) + 
geom_line(col = "darkgreen") + 
geom_point(col = "darkgreen") +
theme_gray() + 
ggtitle("Novo Nordiske B") `
4

1 回答 1

0

将我的评论包装成正确的答案。目前尚不清楚您是希望将其设为单个图(使用facet_wrap)还是将多个图组合到一个窗口中。使用时,使用长格式ggplot2是有益的data.frame,因为可以让基于类似于以下示例的分组列处理所有着色和分组ggplot

library(ggplot2)
data(mtcars)
ggplot(mtcars, aes(x = mpg, y = hp, col = factor(cyl))) + 
  geom_point() + 
  geom_smooth() + 
  labs(col = 'Nmb. Cylinder') 

从这里开始,指南给出了每种颜色的名称,scale_*_(manual/discrete/continuous)并可用于更改特定的调色板(例如scale_colour_discrete,可用于更改因子的调色板)。

在组合 ggplots 时,该patchwork包提供了简单的界面。如果我们假设您有一个向量和tickers,我们可以分别创建一个图列表并使用简单的加法 ( ) 将它们组合起来。titlescolors+

library(purrr)
plots <- vector('list', n <- length(tickers))
base <- ggplot(Stocks, aes(x = Date)) + 
  theme_gray() 
for(i in seq_len(n)){
  plots[[i]] <- base + 
    geom_point(aes_string(y = tickers[i]), col = colors[i]) 
    geom_line(aes_string(y = tickers[i]), col = colors[i]) 
    ggtitle(titles[i])
}
reduce(plots, `+`)

然而,对于股票来说,第一种选择可能会产生更好的结果。

于 2020-08-25T13:44:59.107 回答