Reputation: 1270
Here is my data:
df<-read.table (text=" MD KA PZ
ko1 65 44
ko2 64 43
ko3 56 42
ko4 71 56
ko5 67 66
ko6 88 64
ko7 44 45
ko8 76 33
ko9 33 22
ko10 84 90
", header=TRUE)
I can get only one geom_hline which is called Name1
df1<- df %>%
pivot_longer(-1)
df1<-as.data.frame(df1)
gg<- ggplot(df1,aes(MD, value, fill = name))+
geom_col(position = "dodge", color = "black", width = 1)+
scale_fill_manual(values = c("red", "blue"))
cut <- data.frame(yintercept=20, Name1=factor(20))
gg +
geom_hline(aes(yintercept=yintercept, linetype=Name1),data=cut, show.legend=TRUE)
Now I want to add another legend under Name1 which a cut of 70 as Name2.
Upvotes: 1
Views: 81
Reputation: 39595
Try this:
library(ggplot2)
#Data
cut <- data.frame(yintercept=20, Name1=factor(20))
cut2 <- data.frame(yintercept=70, Name2=factor(70))
#Plots
gg +
geom_hline(aes(yintercept=yintercept, linetype=Name1),
data=cut, show.legend=TRUE,color='red')+
geom_hline(aes(yintercept=yintercept, color='70'),
data=cut2, show.legend=TRUE,linetype=1)+
scale_color_manual(values='green','Name2')+
labs(fill='Name',color='Name2',linetype='Name1')+
guides(fill=guide_legend(order = 1),
linetype = guide_legend(order = 2,
override.aes = list(color = 'red')),
colour = guide_legend(order = 3))
Output:
If you want to add a new scale try this:
#Code
gg +
geom_hline(aes(yintercept=yintercept, linetype=Name1),
data=cut, show.legend=TRUE,color='red')+
geom_hline(aes(yintercept=yintercept, color='70'),
data=cut2, show.legend=TRUE,linetype=1)+
scale_color_manual(values='green','Name2')+
labs(fill='Name',color='Name2',linetype='Name1')+
guides(fill=guide_legend(order = 1),
linetype = guide_legend(order = 2,
override.aes = list(color = 'red')),
colour = guide_legend(order = 3))+
ggnewscale::new_scale_color()+
geom_hline(aes(yintercept=yintercept, color='90'),
data=cut3, show.legend=TRUE,linetype=1)+
scale_color_manual(values='pink','Name3')
Upvotes: 1