我试图(不成功)在我的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时图例没有出现的原因是什么?第二是如何解决这些原因。其中一个原因似乎与多个情节和aes()
的使用有关,但我怀疑还有其他原因。
答案 0 :(得分:2)
你正在以完全错误的方式进行颜色设置。您已将颜色设置为多个图层中的常量字符值,而不是将其映射到单个图层中的变量值。
这主要是因为您的数据并非“整洁”(请参阅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()
答案 1 :(得分:0)
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()
答案 2 :(得分:0)
“ Colour = XYZ”应位于ase()的内部,而不是外部的
geom_point(ase(data,colour = XYZ))------>传说
geom_point(ase(data),colour = XYZ)------>没有图例
希望有帮助,我花了很长时间才弄清楚。
答案 3 :(得分:0)
我在标题上也遇到了类似的问题,尽管如此,我还是找到了一种显示标题的方法:您可以使用添加一个图层
示例:
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")