在R中的图中添加第二个图例

unj*_*nj2 6 statistics r ggplot2

我根据列的因子得到了默认图例.我根据另一列的因子对x轴着色.

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

在此输入图像描述

合并数据(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
Run Code Online (Sandbox Code Playgroud)

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]])
Run Code Online (Sandbox Code Playgroud)

Jul*_*ora 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))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,一个流行的函数(例如可以在此处g_legend找到)很有用,它将绘图中的图例作为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
}
Run Code Online (Sandbox Code Playgroud)

因此,我们保存两个图例,一个用于点 ( 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)])))
Run Code Online (Sandbox Code Playgroud)

请注意第二个图例中的差异。palette()此处使用的原因是 ifeg z <- factor(c(1, 2, 3))thenelement_text(color = z)使用与 不同的颜色geom_point(aes(color = z)),ieelement_text(color = z)从基本图中获取颜色作为eg 2 in 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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述