ggplot2图例没有出现的原因[重复]

Posted

技术标签:

【中文标题】ggplot2图例没有出现的原因[重复]【英文标题】:Reasons that ggplot2 legend does not appear [duplicate] 【发布时间】:2018-07-23 22:15:00 【问题描述】:

我试图(未成功)在我的 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")

我查找了以下堆栈流线程以及 Google 搜索:

Merging ggplot2 legend ggplot2 legend not showing `ggplot2` legend not showing label for added series ggplot2 legend for geom_area/geom_ribbon not showing ggplot and R: Two variables over time ggplot legend not showing up in lift chart Why ggplot2 legend not show in the graph ggplot legend not showing up in lift chart。 这是 4 天前创建的

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

我的第一个问题是使用 ggplot 时没有出现图例的原因是什么?二是如何解决这些原因。其中一个原因似乎与多个地块和aes()的使用有关,但我怀疑还有其他原因。

【问题讨论】:

如果没有实际的数据框就很难回答。但是,您在 ggplot 中使用的是普通的 plot() 语法。这里的关键问题是为 ggplot 准备数据框。如果你能提供你的 df 夹头,我很乐意提供帮助。 我已将数据框添加到我的 OP 【参考方案1】:

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

这主要是因为您的数据不“整洁”(请参阅​​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()

【讨论】:

另外,这个在***.com/questions/40967101/…之前已经回答过了 您的建议修复了我的代码:dfm 完全正确。 aes 通常应该用于将美学映射到变量,而如果您想简单地将美学设置为静态值,则可以直接调整它(aes 之外)。例如:ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point(colour="blue")【参考方案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()

【讨论】:

尝试您的绘图代码会导致错误:Error: A continuous variable can not be mapped to shape 我也希望知道图例不出现的一般原因,而不是简单的代码。无论如何,感谢您的尝试 没有出现图例的一般原因是,您忽略了 ggplot() 的语法。您必须调整数据框以使用 ggplot。【参考方案3】:

colour= XYZ 应该在aes() 里面,而不是在外面:

geom_point(aes(data, colour=XYZ)) #------>legend

geom_point(aes(data),colour=XYZ)  #------>no legend

希望对你有帮助,我花了很长时间才弄明白。

【讨论】:

在这种情况下,颜色声明不起作用。 \我目前有一个类似的问题(这就是我在这里的原因:))。我有一个包含多个 geom_line() 命令的图,我想要这些线的热图颜色,但它们是彩虹的。 \ 当我将 color="black" 放入 aes() 时,颜色不活动并且没有黑线。 \ 当我将颜色从 aes() 中取出时,其中一条线变为黑色;颜色处于活动状态,但这条线的图例消失了。 \ 我还不能同时成功传奇和颜色。 这是问题的正确答案!【参考方案4】:

我对标题也有类似的问题,不过,我找到了一种显示标题的方法:您可以使用添加一个图层

ggtitle(“您要显示的标题的名称”)

示例:

ggplot(data=mtcars,
       mapping = aes(x=hp,
                     fill = factor(vs)))+
  geom_histogram(bins = 9,
                 position = 'identity',
                 alpha = 0.8, show.legend = T)+
  labs(title = 'Horse power',
       fill = 'Vs Motor',
       x = 'HP',
       y = 'conteo',
       subtitle = 'A',
       caption = 'B')+
  ggtitle("Horse power")
                

【讨论】:

问题是关于显示图例,而不是标题

以上是关于ggplot2图例没有出现的原因[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用ggplot2添加图例[重复]

ggplot2:如何显示图例[重复]

R - ggplot2 Legend没有出现在折线图上[重复]

ggplot2:每个方面网格的空间图例/操纵各个图例条目的位置[重复]

Ggplot2 - 我无法插入图表图例[重复]

ggplot2:为彩色条形图和图例添加不同的纹理[重复]