首页 文章

没有出现ggplot2图例的原因

提问于
浏览
1

我试图(不成功)在我的R ggplot2图表中显示一个涉及多个图的图例 . 我的数据框 df 和代码如下:

Individuals        Mod.2        Mod.1          Mod.3
1           2 -0.013473145  0.010859793    -0.08914021
2           3 -0.011109863  0.009503278    -0.09049672
3           4 -0.006465788  0.011304668    -0.08869533
4           5  0.010536718  0.009110458    -0.09088954
5           6  0.015501212  0.005929766    -0.09407023
6           7  0.014565584  0.005530390    -0.09446961
7           8 -0.009712516  0.012234843    -0.08776516
8           9 -0.011282278  0.006569570    -0.09343043
9          10 -0.011330579  0.003505439    -0.09649456

str(df)
    'data.frame':   9 obs. of  4 variables:
     $ Individuals   : num  2 3 4 5 6 7 8 9 10
     $ Mod.2         : num  -0.01347 -0.01111 -0.00647 0.01054 0.0155 ...
     $ Mod.1         : num  0.01086 0.0095 0.0113 0.00911 0.00593 ...
     $ Mod.3         : num  -0.0891 -0.0905 -0.0887 -0.0909 -0.0941 ...

ggplot(df, aes(df$Individuals)) +
    geom_point(aes(y=df[,2]), colour="red") + geom_line(aes(y=df[,2]), colour="red") +
    geom_point(aes(y=df[,3]), colour="lightgreen") + geom_line(aes(y=df[,3]), colour="lightgreen") +
    geom_point(aes(y=df[,4]), colour="darkgreen") + geom_line(aes(y=df[,4]), colour="darkgreen") +
    labs(title = "Modules", x = "Number of individuals", y = "Mode")

我查看了以下stackflow线程以及Google搜索:

这让我意识到,传说出现是一个反复出现的问题,尽管传说通常会自动出现 .

我的第一个问题是使用ggplot时图例不出现的原因是什么?第二是如何解决这些原因 . 其中一个原因似乎与多个情节和使用_2566126有关,但我怀疑还有其他原因 .

3 回答

  • 0

    你完全以错误的方式进行颜色设置 . 您已将颜色设置为多个图层中的常量字符值,而不是将其映射到单个图层中的变量值 .

    这主要是因为您的数据不是"tidy"(见the following

    head(df)
      x           a          b          c
    1 1 -0.71149883  2.0886033  0.3468103
    2 2 -0.71122304 -2.0777620 -1.0694651
    3 3 -0.27155800  0.7772972  0.6080115
    4 4 -0.82038851 -1.9212633 -0.8742432
    5 5 -0.71397683  1.5796136 -0.1019847
    6 6 -0.02283531 -1.2957267 -0.7817367
    

    相反,您应该首先重塑数据:

    df <- data.frame(x=1:10, a=rnorm(10), b=rnorm(10), c=rnorm(10))
    mdf <- reshape2::melt(df, id.var = "x")
    

    这会产生更合适的格式:

    head(mdf)
     x variable       value
    1 1        a -0.71149883
    2 2        a -0.71122304
    3 3        a -0.27155800
    4 4        a -0.82038851
    5 5        a -0.71397683
    6 6        a -0.02283531
    

    这样可以更容易地以预期的方式使用ggplot2,其中颜色被映射到变量的值:

    ggplot(mdf, aes(x = x, y = value, colour = variable)) + 
        geom_point() + 
        geom_line()
    

    Output of ggplot call

  • 2
    ind = 1:10
    my.df <- data.frame(ind,  sample(-5:5,10,replace = T) ,  
    sample(-5:5,10,replace = T) , sample(-5:5,10,replace = T))
    df <- data.frame(rep(ind,3) ,c(my.df[,2],my.df[,3],my.df[,4]), 
    c(rep("mod.1",10),rep("mod.2",10),rep("mod.3",10)))
    colnames(df) <- c("ind","value","mod")
    

    您的数据框应该看起来像这样

    ind value   mod
        1     5 mod.1
        2    -5 mod.1
        3     3 mod.1
        4     2 mod.1
        5    -2 mod.1
        6     5 mod.1
    

    那么你所要做的就是:

    ggplot(df, aes(x = ind, y = value, shape = mod, color = mod)) + 
    geom_line() + geom_point()
    
  • 0

    “Color = XYZ”应位于ase()内,而不是外部:

    geom_point(ase(data,color = XYZ))------>图例

    geom_point(ase(data),color = XYZ)------>没有传说

    希望它有所帮助,我花了很长时间才弄明白 .

相关问题