问题描述
我正在尝试使用我在Excel中创建的代码在R中循环。 我正在尝试从Yahoo Finance收集股票数据,其想法是R将从Excel文件中读取股票名称,然后从Yahoo Finance收集股票名称并创建图表。
在“股票”数据框中,不同列中列出了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") `
解决方法
将我的评论包装成正确的答案。不清楚是要使它成为单个图(使用facet_wrap
)还是要将多个图组合到一个窗口中。使用ggplot2
时,最好在long format中使用一个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
,titles
和colors
,我们可以创建一个绘图列表,并使用简单的加法运算(+
)组合它们。
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,`+`)
但是对于股票而言,第一种选择可能会带来更好的结果。