R:重叠的ggplots

时间:2012-07-30 17:59:40

标签: r ggplot2 histogram

我有一个关于R的快速问题。我正在尝试从我从文件中提取的一些数据制作分层直方图,但我很难让ggplot与我合作。我一直收到这个错误,我一直在寻找答案,但我没有看到太多。

    Error: ggplot2 doesn't know how to deal with data of class uneval
    Execution halted

以下简要介绍一下我的程序。

library("ggplot2")
ex <- '/home/Data/run1.DOC'
ex2 <- '/home/Data/run2.DOC'
...   
ex<- read.table(ex,header=TRUE)
ex2<- read.table(ex2,header=TRUE)
...
colnames(ex) <- c(1:18)
colnames(ex2) <- c(1:18)
...
Ex <- c(ex$'14')
Ex2 <- c(ex2$'14')
...
ggplot()+
geom_histogram(data = Ex, fill = "red", alpha = 0.2) +
    geom_histogram(data = Ex2, fill = "blue", alpha = 0.2) 

我的数据在文件中,看起来有点像这样:

head(ex,10)
        1     2      3     4      5  6   7   8     9  10    11    12
    1  1:28   400   0.42   400   0.42  1   1   2  41.8   0   0.0   0.0
    2  1:96  5599  39.99  5599  39.99 34  42  50 100.0 100 100.0 100.0
    3  1:53   334   0.63   334   0.63  1   2   2  62.1   0   0.0   0.0
    4  1:27  6932  49.51  6932  49.51 48  52  57 100.0 100 100.0 100.0
    5  1:36 27562 124.15 27562 124.15 97 123 157 100.0 100 100.0 100.0
    6  1:14  2340  16.71  2340  16.71 13  17  21 100.0 100 100.0  95.7
    7  1:96  8202  49.71  8202  49.71 23  43  80 100.0 100 100.0 100.0
    8  1:34  3950  28.21  3950  28.21 22  33  36 100.0 100 100.0 100.0
    9  1:60  5563  24.62  5563  24.62 11  24  41 100.0 100  96.5  75.2
    10 1:06  1646   8.11  1646   8.11  7   8  13 100.0 100  87.2  32.0
          13    14    15    16   17   18
    1    0.0   0.0   0.0   0.0  0.0  0.0
    2   93.6  82.9  57.9  24.3  0.0  0.0
    3    0.0   0.0   0.0   0.0  0.0  0.0
    4  100.0  97.1  87.1  57.1  0.0  0.0
    5  100.0 100.0 100.0 100.0 88.3 71.2
    6   40.0   0.0   0.0   0.0  0.0  0.0
    7   81.2  66.7  54.5  47.9 29.1  0.0
    8   76.4  55.7   0.0   0.0  0.0  0.0
    9   57.5  35.4  26.5   4.4  0.0  0.0
    10   0.0   0.0   0.0   0.0  0.0  0.0

但要大得多。这意味着ex和ex2将是从0到100的百分比.Colnames行将像%_above_30这样的列标题更改为R更喜欢的内容,因此我将其更改为每个列名称的编号。

有没有人知道/看到这里的问题因为我没有真正得到它。 谢谢!

1 个答案:

答案 0 :(得分:4)

也许尝试将两个数据框合并为一个并将其提供给一个geom_histogram

#maybe reshape it something like this (base reshape or the 
#reshape package may be a better tool)
dat <- data.frame(rbind(ex, ex2), 
    colvar=factor(c(rep("ex", nrow(ex)), rep("ex2", nrow(ex2))))

ggplot(data = dat, fill = colvar)+
    geom_histogram(position="identity", alpha = 0.2)

这是未经测试的,因为您的代码不可重复(请参阅this link了解如何制作可重现的示例)。

以下是我用可重复的例子谈论的想法:

library(ggplot2) 
path = "http://www-stat.stanford.edu/~tibs/ElemStatLearn/datasets/SAheart.data" 

saheart <- read.table(path, sep=",",head=T,row.names=1) 
fmla <- "chd ~ sbp + tobacco + ldl + adiposity + famhist + typea + obesity" 
model <- glm(fmla, data=saheart, family=binomial(link="logit"), 
    na.action=na.exclude) 
dframe <- data.frame(chd=as.factor(saheart$chd), 
    prediction=predict(model, type="response")) 

ggplot(dframe, aes(x=prediction, fill=chd)) + 
    geom_histogram(position="identity", binwidth=0.05, alpha=0.5)