Reasons that ggplot2 legend does not appear
我试图(未成功)在我的R ggplot2图中显示图例,其中涉及多个图。我的数据框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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搜索:
- 合并ggplot2图例
- ggplot2图例未显示
- ggplot2图例未显示添加系列的标签
- gep_area / geom_ribbon的ggplot2图例未显示
- ggplot和R:两个随时间变化的变量
- ggplot图例未显示在提升图表中
- 为什么ggplot2图例未显示在图中
-
ggplot图例未显示在提升图表中。
这是4天前创建的
这使我意识到,尽管图例通常会自动出现,但使图例出现仍然是一个反复出现的问题。
我的第一个问题是使用ggplot时不显示图例的原因是什么?第二是如何解决这些原因。原因之一似乎与多个图和
1 2 3 | geom_point(aes(data, colour=XYZ)) #------>legend geom_point(aes(data),colour=XYZ) #------>no legend |
希望有帮助,我花了很长时间才弄清楚。
您要使用完全错误的方式设置颜色。您已将颜色设置为多个图层中的恒定字符值,而不是将其映射到单个图层中的变量值。
这主要是因为您的数据不是"整洁的"(请参阅??以下内容)
1 2 3 4 5 6 7 8 | 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 |
相反,您应该首先重塑数据:
1 2 | df <- data.frame(x=1:10, a=rnorm(10), b=rnorm(10), c=rnorm(10)) mdf <- reshape2::melt(df, id.var ="x") |
这会产生更合适的格式:
1 2 3 4 5 6 7 8 | 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易于按预期方式使用,其中颜色映射到变量的值:
1 2 3 | ggplot(mdf, aes(x = x, y = value, colour = variable)) + geom_point() + geom_line() |
我在标题上也遇到了类似的问题,不过,我找到了一种显示标题的方法:您可以使用
添加图层
- ggtitle("您要显示的标题名称")
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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") |
1 2 3 4 5 6 | 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") |
您的数据框应类似于此
1 2 3 4 5 6 7 | 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 |
那么您要做的就是:
1 2 | ggplot(df, aes(x = ind, y = value, shape = mod, color = mod)) + geom_line() + geom_point() |