2013-03-09 93 views
6

我得到了基于列的因子的默认图例。我根据另一列的因子对x轴着色。在地块中添加第二个图例R

我可以为这个x轴颜色添加图例吗?

enter image description here

合并数据(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 

代码

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

你能告诉你用于生成这个代码 – 2013-03-09 21:47:18

+0

@大卫(最好是在重复的例子?):我重视数据帧。你仍然对数据有问题吗? – unj2 2013-03-09 22:02:59

+0

@ kunj2aan,当你正确地复制了你在新的R-session上粘贴的内容时,你是否能够毫无错误地得到这个情节? – Arun 2013-03-09 22:16:33

回答

1

这个解决方案是不一样多功能我们可能想要的,但也并不是很困难的技术。第一一些数据:

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

一个流行的功能g_legend(可以发现例如here)在这种情况下是有用的,它需要一个图例从情节作为GROB(因此这种解决方案并不快)。

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 
} 

所以我们保存两种传说,一为点(x),一个用于x轴(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)]))) 

注意第二个图例的差异。这里使用的是palette(),因为如果例如z <- factor(c(1, 2, 3))然后element_text(color = z)使用与geom_point(aes(color = z))不同的颜色,即element_text(color = z)将基色图的颜色作为例如颜色。 2在plot(1, col = 2)

最后,把一切在一起:

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

相关问题