如何在ggplot中绘制数据框的多个列?

时间:2018-01-29 22:31:00

标签: r ggplot2

我试图绘制一个数据框,其中包含"日期"作为x轴,股票价格作为y轴,我有四种不同的股票要绘制。我对ggplot文档非常困惑,并且没有找到一个简单的解决方案。这是数据框:

appleData <- read.csv("AAPL.csv", header = TRUE)
microsoftData <- read.csv("MSFT.csv", header = TRUE)
googleData <- read.csv("GOOG.csv", header = TRUE)
amazonData <- read.csv("AMZN.csv", header = TRUE)

names(appleData) <- c("Date", "AAPL")
names(microsoftData) <- c("Date", "MSFT")
names(googleData) <- c("Date", "GOOG")
names(amazonData) <- c("Date", "AMZN")

mergedData1 <- merge(appleData, microsoftData, by = "Date")
mergedData2 <- merge(googleData, amazonData, by = "Date")
totalData <- merge(mergedData1, mergedData2, by = "Date")
totalData

数据框被称为&#34; totalData&#34;,当我使用ggplot(totalData)时,我得到一个空白图。我需要帮助的具体是将所有四只股票绘制在同一块地块上,并重新调整价格,使它们都以100美元开始(因此它们的价格相同)。先感谢您。

1 个答案:

答案 0 :(得分:0)

我发现您的问题有点难以帮助,因为您没有提供您正在使用的数据。看看这个惊人的参考,如何提出快速回答的真正好的问题! How to make a great R reproducible example?

我希望以下代码可以帮助您开始回答您的问题。

我做的主要事情之一就是我将数据从一个不整洁的&#34;宽的&#34;数据帧到&#34; tidy&#34;使用gather中的tidyr函数的长数据帧。我强烈建议您查看这个有关整理基础知识的优秀教程http://garrettgman.github.io/tidying/。一旦您的数据“整洁”,就会#34;你会发现许多工具将更容易工作!

祝你好运!


library(dplyr)
library(tidyr)
library(ggplot2)

# create sample data frame with random numbers
set.seed(123)
total_data <- data.frame(date = seq.Date(from = as.Date("2018-01-01"), 
                                             to = as.Date("2018-01-31"), by = "day"),
                         AAPL = sample(100:1000, 31),
                         MSFT = sample(100:1000, 31),
                         GOOG = sample(100:1000, 31),
                         AMZN = sample(100:1000, 31))
head(total_data)
#>         date AAPL MSFT GOOG AMZN
#> 1 2018-01-01  359  912  445  691
#> 2 2018-01-02  809  721  346  388
#> 3 2018-01-03  467  815  832  268
#> 4 2018-01-04  892  122  502  802
#> 5 2018-01-05  943  528  826  183
#> 6 2018-01-06  140  779  827  518

# convert your wide data frame to a tidy long data frame
total_data <- gather(total_data, company, value, -date)

# plot using ggplot2
total_data %>%
  ggplot(aes(x = date, y = value, color = company)) +
  geom_line()