gpt4 book ai didi

r - 不带coord_flip的水平ggplot2::geom_violin

转载 作者:行者123 更新时间:2023-12-04 04:04:21 24 4
gpt4 key购买 nike

我想绘制水平的 fiddle 图(因为我的标签很长)。我的设计约束是:

  • 多个方面(f1),每个方面有多个类别(f2)(所以我想使用aes(x=f2)facet_wrap(~f1)
  • 每个方面的比例不同(所以我想要scales="free")
  • 我想通过facet_wrap()排列的4个不同方面(排除了一些刻面技巧)

  • 不幸的是, scales="free"coord_flip()当前(在可预见的将来)不兼容。

    对此 related question的答案表明:(1)破解一个新的水平几何图形; (2)交换 xy(如前所述,它们仅适用于像散点图这样的对称几何体); (3)放弃常规布局。

    有想法吗?
    set.seed(101)
    library("plyr")
    dd <- expand.grid(f1=factor(1:2),
    f2=paste("inconveniently long label",1:2))
    dd2 <- ddply(dd,c("f1","f2"),
    function(x)
    data.frame(y=rnorm(100,
    mean=10*(as.numeric(x$f2)),
    sd=10^(as.numeric(x$f1)))))
    library("ggplot2")

    我的选择似乎是(1)使用 scale="free",不方便(水平)标签:
    ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1,scale="free")+geom_violin()

    enter image description here

    (2)带 coord_flip(),不方便缩放
    ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1)+geom_violin()+coord_flip()

    enter image description here

    尝试两者( ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1,scale="free")+geom_violin()+coord_flip())给出

    ggplot2 does not currently support free scales with a non-cartesian coord or coord_flip.



    其他想法:
  • 有些几何图形有明确的水平版本(geom_errorbarh);我可以破解我自己的geom_violinh ...
  • 讨论pull request on ggplot2中的水平几何图形
  • This (rather old) example使用构面+ geom_ribbon()破解 fiddle 情节,但它消耗了刻面,使其与facet_wrap()
  • 不兼容

    就其值(value)而言,这就是我目前的真实情节(现在):

    enter image description here

    最佳答案

    不确定这是否有帮助,但这是对this答案的改编,在这里我们“砍”了垂直 fiddle 。

    dd2_violin <- ddply(dd2,.(f1,f2),function(chunk){
    d_y <- density(chunk$y)
    top_part <- data.frame(x=d_y$x, y=d_y$y)
    bottom_part <- top_part[nrow(top_part):1,]
    bottom_part$y <- 0 - bottom_part$y
    return(rbind(top_part,bottom_part))
    })
    #weird trick to get spacing right
    dd2_violin$y2 <- as.numeric(dd2_violin$f2)*(2*max(dd2_violin$y))+dd2_violin$y

    p1 <- ggplot(dd2_violin, aes(x=x,y=y2,group=interaction(f1,f2))) + geom_path()
    #apply same weird trick to get labels

    p1 + facet_grid(~f1,scales="free")+labs(x="y")+
    scale_y_continuous(breaks=unique(as.numeric(dd2_violin$f2)*(2*max(dd2_violin$y))),labels=unique(dd2_violin$f2))

    enter image description here

    关于r - 不带coord_flip的水平ggplot2::geom_violin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643393/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com