lovecos

  •  
  • 2015年11月12日
  • 注册于 2010年9月6日
  • @刘 宏祥</a>:
    哦,原来是这样,没看到你的图片中还有一个*号呢。你说的这个问题 ,还是头一次碰到呢,学习了。
    在不同的分面中(或者指定的分面里)添加不同的注释(或者符号),这个一搜就有答案了。

    http://stackoverflow.com/questions/11889625/annotating-text-on-individual-facet-in-ggplot2#412920#412943#5

    大概就是需要创建一个data.frame,然后把表示横、纵坐标和因子的变量都设置好,就可以在指定的分面里添加星号了。

    ps:你的图画的真不错。 :-)

  • 如果还按照你的做法来,可以尝试给第一张图和第三张图上面的margin设置大一些;
    我给它们加上下面一句(做出来的图还行)
    
    plot.margin=unit(c(4, 1, 0.5, 0.5),units= 'line')
    

    refer: http://stackoverflow.com/questions/17073772/ggplot2-legend-on-top-and-margin
  • 必须要分开来做图吗?不可以使用分面吗?
    
    BXTgrowth %>%
      ggplot(aes(x = time, y = mean, fill = kcl))+
      geom_bar(stat='identity', position= 'dodge', colour= 'black')+
      facet_wrap(~tissue)
    
    我感觉效果是一样的。

    不过你提到的这个问题,自己还没注意过呢,等待高手。
  • [未知用户]
    有点错误,
    上个程序的user time为26s

    如果将
    dm <- dm[-grep(most.ele, dm)]
    换成
    ele.idx <- lapply(dm, function(i) most.ele %in% i)
    dm <- dm[!unlist(ele.idx)]

    user time就会是18.63秒
    :devil:
  • [未知用户]
    确实,楼主提供的方法,既简单又好用!用ethansun提供的模拟数据来进行模拟的话,时间为11秒左右
    (windows8, 12GB, i5-4200M)
    keep.ele <- vector()
    system.time({
      while(length(dm)!=0){
        dm.cha <- unlist(dm)
        most.ele <- names(which.max(table(dm.cha)))[1]
        keep.ele <- c(keep.ele, most.ele)
        dm <- dm[-grep(most.ele, dm)]
      }
    })
  • [未知用户]
    谢谢你的热心回复!

    你提供的这个方法也挺好的(通过将字体调小和修改画布的大小),结果也能够清楚地看到结果;
    但是美中不足的是,画布的上面和下面还空了好多!(肯定应该有个参数或方法能够解决这个问题)

    library(ggplot2)
    qplot(length, data= movies, geom= 'histogram')
    ggsave("test2.pdf", height= 40, width= 5)

    这样出来的图片,就是我像要的(我怀疑自己没有表达清楚),高度进行了拉伸(占满了整个画布)而宽度不变;


    (另外上面你提供的方法中,如果不设置height和width参数的话,效果会更好)


    再次感谢你的回复!
  • 自己顶起!希望路过的看到! :cool:
  • 没太明白你的意思,你不妨把你的数据的一部分给贴出来,然后再写出来你希望输出的结果,这样会更清楚!
    input <- read.table(...)
    head(input)

    此外,你的第一个函数里面,which函数的右括号漏掉了;第二个函数里面的if的判断条件太难读了,你不如多写几行,那样会更清楚些吧。
  • 在做heatmap时,图片右侧的label太多而无法看清楚,所以想在保存成文件(pdf或png)时进行竖直拉伸(主要通过设置width/heigth参数),但是结果图形文件中的图片还是原来大小,图片的上面和下面都留有大片空白,请给点提示。


    示例:(纯粹为了掩饰)
    pdf(file= "test1.pdf", height= 100, width= 5)
    heatmap(as.matrix(rbind(mtcars, mtcars)))
    dev.off()


    此外,使用ggplot2中的绘图函数来进行绘图、保存,却可以拉伸图片来保存!请知情者指示。
  • 回复 第1楼 的 madyounghe:

    可以先给个例子或者片段;

    方便的话,给个R的运行环境情况,这样会更清楚一些!

  • 学习一下,更需要多思考一下!

    看《大数据》的时候,只去关注那些有趣的案例了;看《失控》时,光去关注

    那些机器大战和机器进化之类的事情了,上文提到的重点完全忽略了[s:11]

  • 还没碰到过你说的那个错误信息呢。

    我把你示例中的中文改成了英文字符,试了一下没有报错。

    </p>
    <p>> x<br />
      area year value<br />
    1    a 1990     1<br />
    2    b 1991     2<br />
    3    c 1992     3<br />
    4    d 1993     4<br />
    5    e 1994     5<br />
    6    f 1995     6<br />
    > y<br />
      area year value2<br />
    1    a 1990      7<br />
    2    b 1991      8<br />
    3    c 1992      9<br />
    > merge(x, y, by= 'area', all= T)<br />
      area year.x value year.y value2<br />
    1    a   1990     1   1990      7<br />
    2    b   1991     2   1991      8<br />
    3    c   1992     3   1992      9<br />
    4    d   1993     4     NA     NA<br />
    5    e   1994     5     NA     NA<br />
    6    f   1995     6     NA     NA<br />
    
    </p>

    我用的是Rstudio/R-3.0.2

    <br />
    > sessionInfo()<br />
    R version 3.0.2 (2013-09-25)<br />
    Platform: x86_64-redhat-linux-gnu (64-bit)</p>
    <p>locale:<br />
    [1] C</p>
    <p>attached base packages:<br />
    [1] stats     graphics  grDevices utils     datasets  methods   base     </p>
    <p>loaded via a namespace (and not attached):<br />
    [1] tools_3.0.2<br />
    
    </p>

    google了一下,别人有和你类似的问题,但是那个回复实在是看不懂[s:12]

    同期待高人解答

  • 回复3楼:方法中规中矩,赞一个[s:13]

    回复4楼:利用向量和矩阵的关系来解决问题,确实够tricky[s:11]

    回复7楼:代码很正规,学习了,不过关于内存溢出的那段有点没看懂,还要修炼!

  • 模仿这个帖子:

    http://stackoverflow.com/questions/20117458/replicate-rows-of-a-matrix-in-r

    还有上面的cos里面的帖子

    http://cos.name/cn/topic/107224#post-233376

    <br />
    mm <- as.matrix(df[, c("a", "b")])<br />
    ind <- rep(1:nrow(mm), df$c)<br />
    mm[ind, ]<br />
    
    </p>

    比较了上面的3种方法,第3个方法最快,希望高人再来指点下。[s:12]

  • 问题如题:

    相似的帖子:

    http://cos.name/cn/topic/109025#post-241149

    http://cos.name/cn/topic/107224#post-233376

    例子:

    <br />
    df <- data.frame(a= 1:3, b= 4:6, c= 10:12)</p>
    <p>newdf <- apply(df[, c("a", "b")], 2, rep, time= df$c)</p>
    <p>
    </p>

    如果行数多的时候(比如10000行)或者第三列的数值比较大的时候显然就慢了下来,

    自己尝试了一下,改成矩阵后会更快些

    <br />
    mm <- matrix(0, nrow= sum(df$c), ncol= 2)<br />
    mm[, 1] <- rep(df$a, df$c)<br />
    mm[, 2] <- rep(df$b, df$c)<br />
    
    </p>

    请问有没有高效一点的办法?

  • 赞一个!R里面也直接使用了管道符,“军刀”级别的包啊!

    吐槽一下:

    github里的这段示例代码里的最后一句,我觉得可以换一个值来返回,这样看着更清晰[s:11]

    <br />
    mtcars %|>%<br />
      (df -> lm(mpg ~ ., data=df)) %>%<br />
      summary %>>%<br />
      .$r.squared<br />
    
    </p>
  • 谢谢manxingxing和楼主的回答,可能我忽略了一个定义:

    “用到”和“计算(evaluate)”是两码事,在执行

    <br />
    adders <- lapply(1:10, add)<br />
    


    仅仅是“用”add()函数中的参数x来表示adders列表的每一个元素(或组分),

    但是一直没有对x进行计算(即x没有被evaluated)。

    等到执行执行
    <br />
    adders[[1]](10)<br />
    


    这时,就需要计算add()函数中的x值了,而经过lapply的循环后,最后传递给

    add()的参数已经是10了,即x为10,所以就得到了上述的结果。</p>

    望批评指正[s:13]

  • 回复 第1楼 的 yiluheihei:

    求教一下:

    关于其中的lazy evaluation中前一个例子还好理解,但是后面的关于adder的例子则

    不好懂了。

    <br />
    add1 <- add(1)<br />
    add2 <- add(2)</p>
    <p>add1(10)<br />
    # 结果为11</p>
    <p>add2(10)<br />
    # 结果为12<br />
    


    上面的例子和作者的例子区别在哪呢?</p>

    我感觉在用lapply()时,同样也把1:10一个个传给add(),然后x依次等于1:10,并且

    利用x才能生成adders列表的一个个元素。这里x用到了啊?求解释!

  • 谢谢两位的热心回复,难怪刚开始没人回复,原来是站上已经有人提出

    类似的问题,只怪自己没有细心去找!

    再次感谢zggjtsgzczh和yufree,[s:13]