错误:ggplot2不知道如何处理类字符的数据

时间:2016-07-07 14:02:53

标签: r ggplot2

我最近开始与R合作,展示公司和机构(世界银行,EIA,德勤和麦格理)对不同产品(美国天然气,日本LNG和NBP天然气)的价格预测。 因此,有一张图表显示世界银行关于美国天然气的价格预测,世界银行关于日本液化天然气的另一个图表,世界银行关于NBP天然气的另一个图表,以及EIA,Deloitte和Macquarie等。所以现在是12张图。 我在使用pastesprintf()函数时遇到了一些问题,但我设法解决了这个问题。

现在我有一个很大的最终问题,因为当我运行代码时,我得到:

Error : ggplot2 doesn't know how to deal with data of class character

我真的不知道如何处理它。 你知道它有什么问题吗? 谢谢!

以下是代码:

chemin <- choose.files()
forecast <- data.frame(read.table(chemin, sep=";", dec=",", header=TRUE))
forecast$Publication.date <- as.Date(forecast$Publication.date, format="%d/%m/%Y")
forecast$Price.date <- as.Date(forecast$Price.date, format="%d/%m/%Y")
EIAforecast <- forecast[forecast$Forecaster=="EIA",]
WorldBankforecast <- forecast[forecast$Forecaster=="World Bank",]
Macquarieforecast <- forecast[forecast$Forecaster=="Macquarie",]
Deloitteforecast <- forecast[forecast$Forecaster=="Deloitte",]

library(ggplot2)
library(scales)
n <- 1
c1 <- c("USA", "Japan", "NBP")
c2 <- c("WorldBank", "EIA", "Deloitte", "Macquarie")
for (i in c1)
{
for (j in c2)
{
assign(sprintf("%srealizedprice", i), data.frame(read.table(paste("C:\\Travail\\Maxime\\Memoire\\Forecasts\\csv", paste0(i, "realizedprice.csv"), sep="\\"), sep=";", dec=",", header=TRUE)))
assign(sprintf("%srealizedprice$Date", i), as.Date(sprintf("%srealizedprice$Date", i), format="%d/%m/%Y"))
assign(sprintf("%srealizedpricegraph", i), ggplot(data=paste0(i, "realizedprice"), mapping=aes(x=Date, y=paste(i, "price", sep="."))) + geom_line())
assign(sprintf("%s%sforecast", i, j), paste(paste(paste0(j, "forecast"), paste0(j, "forecast$Price.type == "), sep="["), paste("\"Natural Gas", paste0(i, "\"]"), sep=", "), sep=""))
assign(sprintf("%sgraph", i), ggplot(data=get(paste0(i, j, "forecast")), aes(x=Price.date, y=Price, colour=as.character(paste(Price.type, Publication.date))))+geom_line()+geom_point()+geom_line(data = paste0(i, "realizedprice"), aes(x = Date, y = paste(i, "price", sep=".")), color = "cornflowerblue")+xlab('Date')+ylab('Price')+ggtitle(sprintf("World Bank forecast for Natural Gas %s", i)))
assign(sprintf("%sgraph", i), sprintf("%sgraph", i) + scale_x_date(breaks = date_breaks("year"),labels = date_format("%Y"))+scale_y_continuous(breaks = seq(0, 25, 1)))
mypath <- file.path(sprintf("C:\\Travail\\Maxime\\Memoire\\Forecasts\\Graphs\\Boucle\\%d.png", n))
paste0(i, "graph")
png(file=mypath)
plot(sprintf("%sgraph", i))
dev.off()
n <- n + 1
}
}

1 个答案:

答案 0 :(得分:1)

尝试在地图上绘制纬度/经度时出现此问题。这条消息对我的口味略显模棱两可。问题是我用c(lat,lon)从另一个数据集中提取了坐标,从而创建了一个列表,当我应该使用cbind(lat,lon)来创建一个矩阵然后我使用它强制转换为数据帧as.data.frame。