如何修复我的x轴,并在R中使用GGPlot2绘制我的日期?

时间:2017-07-29 12:37:50

标签: r ggplot2

所以我有一个包含两列的CSV文件。日期(DD-MM-YYYY)和天然气价格(0.00)。我还使用as.Date转换了日期。但是当我尝试使用ggplot绘制它时,我不断收到此错误,它无法使用数字类型或其他东西。

这是我的源代码:

gasoline <- read.csv(file.choose()) 
Date <- gasoline$Date 
Price <- as.numeric(gasoline$Price) str(Price) ggplot(gasoline, aes(Date, Price)) + geom_line(colour="red")

不幸的是,这段代码导致我的图表在底部塞满了每个日期,因此几乎看不清楚:

R output

(imgur.com/a/iitXw)。 这只是一条扁线。它还说,“geom_path:每组只包含一个观察。你需要调整群体审美吗?”

如何在Ggplot中绘制诸如此类的日期?

1 个答案:

答案 0 :(得分:3)

如果没有您的代码或数据,很难诊断问题或提出解决方案。但是,下面的代码是一种非常简单的方法,可以根据与您的数据描述匹配的示例数据创建基本图表:

# attach the ggplot package
library(ggplot2)

# make example data that matches your description
# (where the dates are January, April, July, and October 1 of 2015)
dates <- c('01-01-2015', '01-04-2015', '01-07-2015', '01-10-2015')
prices <- rnorm(4, 3)

# now convert dates to date format
dates <- as.Date(dates, format='%d-%m-%Y')

# you should then be able to create a simple plot using qplot
qplot(dates, prices, geom='line', xlab='Date', ylab='Price',
      main='Gas Prices Over Time')

请注意as.Date()功能中使用format选项。由于日期为DD-MM-YYYY格式,而as.Date()采用YYYY-MM-DD格式,因此如果没有该选项,您的日期将无法正确转换:

dates <- c('01-01-2015', '01-04-2015', '01-07-2015', '01-10-2015')
dates <- as.Date(dates)
format(dates, format="%B %d %Y")
[1] "January 20 1" "April 20 1"   "July 20 1"    "October 20 1"

由于您的日期存在数字问题,我怀疑您在将日期转换为日期后进行了一些数据清理;例如,

dates <- c('01-01-2015', '01-04-2015', '01-07-2015', '01-10-2015', NA)
dates <- as.Date(dates, format='%d-%m-%Y')
class(dates)
[1] "Date"
dates <- ifelse(is.na(dates), NA, dates)
class(dates)
[1] "numeric"

这是因为Date对象存储为整数值,在进行逻辑比较(see this page at IDRE)时使用。但是,在绘图时仍然不应该抛出错误;轴标签应该只是数字而不是日期。

prices <- c(rnorm(4, 3), NA)
qplot(dates, prices, geom='line', xlab='Date', ylab='Price',
      main='Gas Prices Over Time')

希望这可以让您开始解决问题。

编辑:

看过你的csv文件的前十二行,我可以给你以下解决方案:

library(ggplot2)
df <- read.csv('dataframe.csv') # change file name/path as appropriate
df$Date <- as.Date(df$Date, format='%m/%d/%Y')
ggplot(df, aes(x=Date, y=Price)) + geom_line(color="red")

对我来说,这产生了以下情节:

Gas Prices Plot

我认为问题在于,在您提供给我的代码中,日期变量未转换为日期对象;这是一个因素(如您提供的屏幕截图右下角所示)。每个级别的因子只有一个观察结果,导致您看到的错误。您可以通过将group=1添加到审美(即aes(x=Date, y=Price, group=1))来消除该错误,但这并不能完全满足您的需求。

关键是确保将变量转换为Date对象(注意格式,如上所述);然后一切都很顺利。