Add a second legend to the graph in R

I got a standard legend based on column coefficient. I colored the x axis based on the coefficient of another column.

Can I add a legend for this x-axis color?

enter image description here

Combined data ( https://dl.dropbox.com/u/81597211/Untitled.pdf )

row.names LCA_CASE_WORKLOC1_CITY LCA_CASE_JOB_TITLE LCA_CASE_WORKLOC1_STATE LCA_CASE_WAGE_RATE_FROM Company 4726 REDWOOD SHORES SOFTWARE DEVELOPER - ARCHITECT CA 263500.00 ORACLE 102663 DENVER SOFTWARE ENGINEER (SOFTWARE DEVELOPER 5) CO 170000.00 ORACLE 103621 DENVER SOFTWARE ENGINEER (SOFTWARE DEVELOPER 5) CO 170000.00 ORACLE 95210 SANTA CLARA SOFTWARE ENGINEER (SOFTWARE DEVELOPER 4) CA 155000.00 ORACLE 18858 SANTA CLARA SOFTWARE ENGINEER (CONSULTING SOLUTION DIRECTOR) CA 150000.00 ORACLE 19514 IRVING CONSULTING TECHNICAL MANAGER TX 150000.00 ORACLE 57054 REDWOOD SHORES SOFTWARE ENGINEER (SOFTWARE DEVELOPER 4) CA 150000.00 ORACLE 76335 REDWOOD SHORES SOFTWARE ENGINEER (APPLICATIONS DEVELOPER 4) CA 150000.00 ORACLE 79964 REDWOOD SHORES SOFTWARE ENGINEER (SOFTWARE DEVELOPER 5) CA 150000.00 ORACLE 

code

 library("ggplot2") colour = factor(merged$Company) xcolor = factor(merged$LCA_CASE_WORKLOC1_STATE) qplot(merged[[2]], merged[[4]], colour = colour, xlab="Positions", ylab ="Salary", main="H1B Salary 2012") + theme(axis.text.x=element_text(angle=90,vjust=0.5, hjust=1, size=10, color= xcolor, lineheight=10)) + scale_y_continuous(breaks=seq(0,300000, 10000)) + theme(panel.grid.minor = element_line(colour = "red", linetype = "dotted")) + scale_x_discrete(merged[[2]]) 
+6
source share
1 answer

This solution is not as universal as we might want, but it is also not very difficult and technical. First, some data:

 y <- c(5, 2, 3, 2) x <- factor(c("A", "B", "C", "A")) z <- factor(c("D", "E", "F", "E")) p <- qplot(x, y, geom = "point") + theme(axis.text.x = element_text(color = z)) 

The popular g_legend function (can be found, for example, here ) is useful in this case, it accepts the legend from the plot as (therefore, this decision is not fast).

 g_legend<-function(a.gplot){ tmp <- ggplot_gtable(ggplot_build(a.gplot)) leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box") legend <- tmp$grobs[[leg]] legend } 

So, we save two legends: one for the points ( x ) and one for the x ( z ) axis.

 legends <- list(g_legend(p + geom_point(aes(color = x))), g_legend(p + geom_point(aes(color = z)) + scale_color_manual(values = palette()[as.numeric(z)]))) 

Note the difference in the second legend. palette() used here because, for example, if z <- factor(c(1, 2, 3)) , then element_text(color = z) uses different colors than geom_point(aes(color = z)) , those. element_text(color = z) accepts colors from the base graph, for example. 2 in plot(1, col = 2) .

Finally, all together:

 library(gridExtra) grid.arrange(p + geom_point(aes(color = x)) + guides(color = 'none'), do.call(arrangeGrob, legends), nrow = 1, widths = c(0.8, 0.2)) 

enter image description here

+1
source

All Articles