将函数应用于变量的所有可能值

时间:2014-12-01 12:52:03

标签: r plot ggplot2 apply

我想获得与变量中的因子/值一样多的图。

例如,我想绘制以下变量(v1,v2,v3,v4,v5,v6,v7,v8),我已将其定义为变量country上所有可能值的比例。在这种情况下,总共有三个不同的情节。

我知道如何单独绘制它,例如在这种情况下我会使用以下内容:

basicgraph(Data[country==1, scale1] )
basicgraph(Data[country==2, scale1] )
basicgraph(Data[country==3, scale1] ) 

我希望我的函数能够绘制与因子/值一样多的图形(不指定因子/值的数量)。我试过"申请"但我无法真正发挥作用,所以任何线索对我都有好处。

我有一个看起来像的数据集:

    v1  v2  v3  v4  v5  v6  v7  v8  country
1   NA  NA  NA  NA  NA  NA  NA  NA  1
2   5   5   5   5   5   4   5   5   2
3   4   5   3   5   4   5   5   5   3
4   5   5   5   4   2   4   4   5   1
5   4   3   5   4   4   5   4   5   2
6   5   5   5   2   3   4   3   5   3
7   NA  NA  NA  NA  NA  NA  NA  NA  1
8   3   5   5   5   4   5   4   4   2
9   4   5   5   4   5   5   4   5   3
10  2   4   4   5   4   5   4   5   1
11  4   5   5   3   4   4   4   5   2
12  4   5   4   4   5   4   4   5   3
13  5   5   4   3   3   5   5   5   1
14  3   5   1   2   3   1   4   5   2

我已将比例定义为:

scale1  <- names(Data) %in% c( "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8")

我已经通过以下方式定义了一个情节函数:

basicgraph<-function(df, title, lab)

{

  for(i in 1:length(df))
  {
    y <- melt(df)
    z <- with(y, as.data.frame(table(variable, value, exclude = NULL)))
    z <- z[!is.na(z$variable), ]
    z$scale <- z$variable
    levelss<-levels(z$variable)

  }

theme_nogrid <- function (base_size = 12, base_family = "") 
      {
        theme_bw(base_size = base_size, base_family = base_family) %+replace% 
        theme(panel.grid = element_blank())   +
         theme(axis.text.x =element_text(size = base_size * 0.8 , lineheight = 0.9, 
                                         vjust = 0.5, hjust=1, angle=90))
       }

plot1<-function(z) { 
  ggplot(data = z, aes(x = variable, y = value, size = Freq))+
    geom_point(aes(size = Freq,  stat = "identity", position = "identity"), shape = 20, color="black", alpha=0.6) +
    scale_size_continuous(range = c(3,15)) + 
     scale_x_discrete(breaks=levelss,labels=lab)+   
    xlab("")+  #Afegir/canviar títol eix x
    ylab("Response")+ #Afegir/canviar títol eix y
    ggtitle(title)+  #Títol a dalt
    theme_nogrid()
}

} 

1 个答案:

答案 0 :(得分:0)

这是一个非常令人困惑的问题和例子。我你想为每个country值生成不同的图表吗?在这种情况下,我建议这样的事情:

library(reshape2)
Data_m <- melt(Data, id.vars="country")  # melt the data into 'long' format

f <- function(d) {  # function that produces a graph and waits
    print(qplot(variable, value, data=d) + ggtitle(unique(d$country)))
    readline()
}

library(plyr)
d_ply(Data_m, .(country), f)  # produces three separate graphs

d_ply调用将Data_m拆分为三个部分,并在每个部分重复调用f,生成该数据子集的图形,而不知道所绘制数据的任何信息。