ggplot 2“错误:提供给连续刻度的离散值”

时间:2013-05-13 18:34:12

标签: r ggplot2

我想问一下如何解决问题标题中描述的这个错误?就在昨天,代码工作正常,绘图程序产生了所需的图形。今天醒来并尝试添加一些功能,然后收到错误消息。

任何线索,为什么以及如何解决这个问题?

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...

1 个答案:

答案 0 :(得分: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_ur以及pop_ru列,因此请在融化之前将其删除

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

然后你不必担心强迫其他类型的会费到不相关的列。