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图例没有出现的原因[重复]的主要内容,如果未能解决你的问题,请参考以下文章
R - ggplot2 Legend没有出现在折线图上[重复]