2013-03-09 11 views
6

hinzu Ich habe die Standardlegende basierend auf einem Faktor einer Spalte. Ich färbte die x-Achse basierend auf einem Faktor einer anderen Spalte.Fügen Sie eine zweite Legende in das Diagramm in R

Kann ich auch eine Legende für diese x-Achsenfarbe hinzufügen?

enter image description here

Merged 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]]) 
+2

Können Sie zeigen den Code, den Sie benutzten erzeugen –

+0

@ David (vorzugsweise in reproduzierbarem Beispiel?): Ich hat den Datenrahmen angebracht bin. Haben Sie immer noch Probleme mit den Daten? – unj2

+0

@ kunj2aan, wenn Sie das genau kopieren, was Sie in eine neue R-Sitzung eingefügt haben, können Sie das Diagramm ohne Fehler erhalten? – Arun

Antwort

1

Diese Lösung nicht so vielseitig ist, wie wir wollen könnte, aber auch ist es nicht sehr schwierig und technisch. Zunächst einige Daten:

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)) 

Eine beliebte Funktion g_legend (kann zum Beispiel here zu finden) nützlich ist, in diesem Fall ist es eine Legende von einem Grundstück als grob nimmt (daher ist diese Lösung nicht schnell).

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 sparen wir zwei Legenden, eine für die Punkte (x) und eine für die x-Achse (z).

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)]))) 

Beachten Sie einen Unterschied in der zweiten Legende. palette() wird hier verwendet, weil z.B. z <- factor(c(1, 2, 3)) dann element_text(color = z) verwendet andere Farben als geom_point(aes(color = z)), d. H. element_text(color = z) nimmt Farben von der Grundfläche, wie z.B. 2 in plot(1, col = 2).

Schließlich setzt alles zusammen:

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

Verwandte Themen