所以我有一个包含两列的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")
不幸的是,这段代码导致我的图表在底部塞满了每个日期,因此几乎看不清楚:
(imgur.com/a/iitXw)。 这只是一条扁线。它还说,“geom_path:每组只包含一个观察。你需要调整群体审美吗?”
如何在Ggplot中绘制诸如此类的日期?
答案 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")
对我来说,这产生了以下情节:
我认为问题在于,在您提供给我的代码中,日期变量未转换为日期对象;这是一个因素(如您提供的屏幕截图右下角所示)。每个级别的因子只有一个观察结果,导致您看到的错误。您可以通过将group=1
添加到审美(即aes(x=Date, y=Price, group=1)
)来消除该错误,但这并不能完全满足您的需求。
关键是确保将变量转换为Date
对象(注意格式,如上所述);然后一切都很顺利。