6

我得到了基于列因子的默认图例。我根据另一列的因子为 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

代码

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

1 回答 1

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(例如可以在此处找到)很有用,它将图例中的图例作为 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()在这里使用是因为 if eg z <- factor(c(1, 2, 3))thenelement_text(color = z)使用与 不同的颜色geom_point(aes(color = z)),即element_text(color = z)从基本图中获取颜色,例如 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))

在此处输入图像描述

于 2013-03-29T21:08:08.113 回答