2017-10-19 66 views
0

我的数据是这样的工作后:重新排序并没有加入第二geom_points

> head(GEE) 

    trait beta se  p analysis signif 
1 trait1 0.078 0.01 9.0e-13 group1 1 
2 trait2 0.076 0.01 1.7e-11 group1 1 
3 trait3 0.063 0.01 1.8e-08 group1 1 
4 trait4 0.013 0.01 .06  group1 0 
5 trait5 0.018 0.01 .54  group1 0 
6 trait6 -0.014 0.01 .64  group1 0 

我试图与点和errorbars的gglot2正在对命名公测第二列排序的阴谋。这工作正常用下面的代码:

ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) + 
    geom_point(aes(color=analysis)) + 
    geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2, 
       position=position_dodge(.9)) + 
    theme_light() + 
    coord_flip() 

不过,我要添加星号的显著点,我有额外的代码块,成功地增加了星号来显著点:

geom_point(data = GEE[GEE$signif == 1, ], 
      color="red", 
      shape = "*", 
      size=12, 
      show.legend = F) + 

当它添加到上面以前的绘图命令,完整的命令如下:

ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) + 
    geom_point(data = GEE[GEE$signif == 1, ], 
      color="red", 
      shape = "*", 
      size=12, 
      show.legend = F) + 
    geom_point(aes(color=analysis)) + 
    geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2, 
       position=position_dodge(.9)) + 
    theme_light() + 
    coord_flip() 

但是添加星号后的代码的问题是,它以某种方式取消了我用“x = reorder(trait,beta)”指定的重新排序。订单现在完全不同。为什么? :'(

UPDATE: @Lamia在这个问题不能被重新制作与在这篇文章中给出的数据的评论中指出此信息中的数据只显示这是所有的顶级行来自同一组(group1,见“分析”一栏),但在我的完整数据集中有三组。所有三组,所以看起来可能有些事情要解决这个问题...

更新2: 作为@Lamia建议(对不起,应该哈已经做了这开头),我已经添加了以下数据能重现问题:

trait,beta,se,p,analysis,signif 
trait1,0.078,0.01,9.00E-13,group1,1 
trait2,0.076,0.01,1.70E-11,group1,1 
trait3,-0.032,0.01,0.004,group1,0 
trait4,0.026,0.01,0.024,group1,0 
trait5,0.023,0.01,0.037,group1,0 
trait1,0.042,0.01,4.50E-04,group2,1 
trait2,0.04,0.01,0.002,group2,1 
trait3,0.03,0.01,0.025,group2,0 
trait4,0.025,0.01,0.078,group2,0 
trait5,0.015,0.01,0.294,group2,0 
trait1,0.02,0.01,0.078,group3,0 
trait2,0.03,0.01,0.078,group3,0 
trait3,0.043,0.01,1.90E-04,group3,0 
trait4,0.043,0.01,2.40E-04,group3,1 
trait5,0.029,0.01,0.013,group3,0 
+1

我不能重现你的问题,这两种情况下的订单似乎都是一样的(1,2,3,5,4,6)。 – Lamia

+0

感谢您的检查!我有超过1个组,并且在帖子中它只显示我的数据中全部来自group1的最高行。当我将数据减少到仅包含一个组时,我无法重现该问题。当我包括所有组(三个组,在“分析”栏中指定)时,我可以重现该问题。谢谢,我会更新帖子。 – Abdel

+1

您应该在您的示例中包含一个可用于重现问题的数据框。如果它太大,这并不一定是您的完整数据集。 – Lamia

回答

2

考虑的几点建议......

1:馈入ggplot()前缠斗的数据帧。由于trait是一个分类变量,因此您可以明确指定其级别作为因子。只有使用:

library(dplyr) 

g2 <- GEE %>% 
    mutate(trait = factor(trait, levels = trait[order(beta[analysis == "group1"])])) 

> levels(g2$trait) 
[1] "trait3" "trait5" "trait4" "trait2" "trait1" 

我们可以直观地验证是根据特征的,以第1组的贝塔值是3-5-4-2-1:

ggplot(GEE, aes(x = beta, y = analysis, label = trait)) + geom_label() 

plot1

2如果可能的话,为ggplot()提供一个数据源。这确保了所有的审美映射链接是一致的,&也更容易维护。

ggplot(g2, aes(y = beta, x = trait, group = analysis, color = analysis, 
       ymin = beta - 2*se, ymax = beta + 2*se)) + 
    geom_point(aes(alpha = signif), # hide non-significant points while using the same dataset 
      color = "red") +  # override 'color = analysis' in ggplot() 
    geom_point() + 
    geom_errorbar() + 
    scale_alpha_identity() 

3:重复使用相同的position_dodge()的所有相关geoms。再一次,如果您希望下次更改闪避宽度,则更容易维护。

pd <- position_dodge(0.9) 

ggplot(g2, aes(y = beta, x = trait, group = analysis, color = analysis, 
       ymin = beta - 2*se, ymax = beta + 2*se)) + 
    geom_point(aes(alpha = signif), 
      color = "red", shape = "*", size = 12, show.legend = F, 
      position = pd) + 
    geom_point(position = pd) + 
    geom_errorbar(width=.2, position = pd) + 
    scale_alpha_identity() + 
    theme_light() + 
    coord_flip() 

结果(性状分类为3-5-4-2-1,从底部到顶部):

plot2

数据:

GEE <- read.csv(
    text = 
"trait,beta,se,p,analysis,signif 
trait1,0.078,0.01,9.00E-13,group1,1 
trait2,0.076,0.01,1.70E-11,group1,1 
trait3,-0.032,0.01,0.004,group1,0 
trait4,0.026,0.01,0.024,group1,0 
trait5,0.023,0.01,0.037,group1,0 
trait1,0.042,0.01,4.50E-04,group2,1 
trait2,0.04,0.01,0.002,group2,1 
trait3,0.03,0.01,0.025,group2,0 
trait4,0.025,0.01,0.078,group2,0 
trait5,0.015,0.01,0.294,group2,0 
trait1,0.02,0.01,0.078,group3,0 
trait2,0.03,0.01,0.078,group3,0 
trait3,0.043,0.01,1.90E-04,group3,0 
trait4,0.043,0.01,2.40E-04,group3,1 
trait5,0.029,0.01,0.013,group3,0") 

> levels(GEE$trait) # default order is 1-2-3-4-5 
[1] "trait1" "trait2" "trait3" "trait4" "trait5" 
+0

这真是太好了,我爱你<3 – Abdel

1

试试这个:

library(tidyverse) 

GEE <- tribble(
    ~trait, ~beta, ~se, ~p, ~analysis, ~signif, 
    "trait1", 0.078, 0.01, 9.0e-13, "group1", 1, 
    "trait2", 0.076, 0.01, 1.7e-11, "group1", 1, 
    "trait3", 0.063, 0.01, 1.8e-08, "group1", 1, 
    "trait4", 0.013, 0.01, .06, "group1", 0, 
    "trait5", 0.018, 0.01, .54, "group1", 0, 
    "trait6", -0.014, 0.01, .64, "group1", 0 
) 

GEE %>% 
    ggplot(aes(y = beta, x = reorder(trait, beta)), group = analysis) + 
    geom_point(aes(color = analysis)) + 
    geom_errorbar(aes(ymin = beta - 2 * se, 
        ymax = beta + 2 * se, 
        color = analysis, 
        width = 0.2), 
       position = position_dodge(0.9)) + 
    geom_point(data = GEE[GEE$signif == 1, ], 
      color="red", 
      shape = "*", 
      size=12, 
      show.legend = F) + 
    theme_light() + 
    coord_flip() 

它改变了这个阴谋:

enter image description here

而且使其看起来像这样:

enter image description here

这是你在找什么?

+0

谢谢!但是这对我来说还没有奏效......我添加了重现我的问题的数据! – Abdel

相关问题