2013-05-13 80 views
6

我想問問如何解決問題標題中描述的這個錯誤?就在昨天,代碼工作正常,繪圖程序產生了所需的圖形。今天醒來,試圖添加一些功能,然後得到錯誤信息。ggplot 2「錯誤:提供給連續比例的離散值」

任何線索爲什麼以及如何解決這個問題?

THX

數據鏈接: Data.csv

代碼:

# Loading data 
    morStats <- read.csv(file = "F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/DissertationDraft/MoroccoCGE-CC_Stats.csv", header=TRUE, sep=",", na.string="NA", dec=".", strip.white=TRUE) 

    # Transferring the .csv data into data frames 
    moroccostats <- as.data.frame(morStats) 

    # Changing the data in the dataframe to "as.numeric" 
    moroccostats[3:38] <- sapply(moroccostats[3:38],as.numeric) 
    moroccostats <- droplevels(moroccostats) 

    # reorder 
    moroccostats <- transform(moroccostats,year=factor(year,levels=unique(year))) 

    # Load packages 
    library(reshape2) 
    library(ggplot2) 
    library(lattice) 
    library(grid) 
    library(plyr) 
    library(gridExtra) 
    library(scales) 

    #---------------------------------------------------------------------- 
    # Figure 1: Evolution of population (in absolute terms) 1960-2050 
    #--------------------------------------------------------------------- 

    #_Code_Begin... 

    moroccostats.f <- melt(moroccostats, id="year") 
    morstats.pop <- moroccostats.f[moroccostats.f$variable %in% c("pop_t","pop_ur","pop_ru"),] 

    Figure1 <- ggplot(data=morstats.pop,aes(x=factor(year), y=value,colour=variable)) 
    Figure1 + geom_line(aes(group=factor(variable)),size=1) + geom_point() + scale_colour_manual("Population",labels=c("Total","Urban","Rural"),values = c("black","red","blue")) + 
    labs(y="Population (in 1000)") + 
    theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 13, hjust = 1, vjust = 0.5),axis.title.x = element_blank()) + 
    theme(axis.text.y = element_text(colour = 'black', size = 13, hjust = 0.5, vjust = 0.5), axis.title.y = element_text(size = 10, hjust = 0.5, vjust = 0.2, face = 'bold')) + 
    scale_x_discrete(breaks = seq(1960, 2050, by=2)) + 
    scale_y_continuous(breaks = seq(0, 42000, by=5000)) 

    #_Code_End... 

回答

10

moroccostats具有結構

> str(moroccostats) 
'data.frame': 91 obs. of 38 variables: 
$ year   : Factor w/ 91 levels "1960","1961",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ periodframe  : Factor w/ 4 levels "0","Phase 1 (1965 to 1985)",..: 1 1 1 1 1 2 2 2 2 2 ... 
$ pop_t   : num 11635 11897 12177 12473 12785 ... 
$ pop_ur   : num 3395 3547 3703 3862 4026 ... 
... 

當你融化,到今年獲得moroccostats.f,你

> str(moroccostats.f) 
'data.frame': 3367 obs. of 3 variables: 
$ year : Factor w/ 91 levels "1960","1961",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ variable: Factor w/ 37 levels "periodframe",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ value : chr "0" "0" "0" "0" ... 

注意value是一個字符,因爲periodframe是一個因素。我猜猜periodframe從一個數字變成了一個字符(「第一階段(1965年至1985年)」)。

由於您只繪製pop_tpop_urpop_ru列,融

morstats.pop <- melt(moroccostats[c("year","pop_t","pop_ur","pop_ru")], id="year") 

,那麼你不必擔心強制轉換到其他類型的會費無關列前拉出來的那些。

+0

它工作得很好,謝謝你的幫助:) – iouraich 2013-05-13 19:20:27

相關問題