user330
user330

Reputation: 1270

Adding an extra geom_hline to the legend in R

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

Answers (1)

Duck
Duck

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:

enter image description here

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

Related Questions