我可以使用ggplot分别控制x和y轴吗?

时间:2011-06-30 21:30:56

标签: r ggplot2

以下是ggplot wiki

中的ggplot
baseplot <- ggplot(data.frame(x=1:10, y=10:1)) +
    geom_point(aes(x = x, y = y))
baseplot

enter image description here

问题

是否可以单独控制这些轴,例如只做x轴黑色? axis.line.xaxis.line.y似乎不是选项之一。

我尝试了什么

  1. 维基表明,例如,可以控制轴的颜色

    baseplot + opts(axis.line = theme_segment(colour = 'black', size = 2))
    

    enter image description here

  2. 使用geom_segment有效,但其限制是必须将线条与图号匹配。

    有没有办法获得,例如最大和最小的轴和来自baseplot对象的刻度?这将减少潜在的错误。 更新此问题的答案“不,尚未”,已涵盖previously

    baseplot + geom_segment(aes(x = c(0,0), y = c(0,0), 
                            yend = c(0, max(y)), xend = c(max(x), 0), 
                            size = c(0.5, 0.1))) + 
               geom_segment(aes(x = 0, y = y, 
                            xend = -1, 
                            yend = y, 
                            size = 0.1))
    
  3. enter image description here

4 个答案:

答案 0 :(得分:10)

不支持分别控制轴线。 您可以在绘图后删除或编辑该行:

> baseplot + opts(axis.line = theme_segment(colour = 'black', size = 2))
> grid.remove(gPath("axis_v", "axis.line.segments"), grep=TRUE)

> baseplot + opts(axis.line = theme_segment(colour = 'black', size = 2))
> grid.edit(gPath("axis_v", "axis.line.segments"), grep=TRUE, gp=gpar(col="red"))
> grid.edit(gPath("axis_h", "axis.line.segments"), grep=TRUE, gp=gpar(col="blue"))

<强>已更新

在0.9.1-中,这可能会改变如下:

grid.edit(gPath("axis-l", "axis.line.segments"), grep=TRUE, gp=gpar(col="red"))
grid.edit(gPath("axis-b", "axis.line.segments"), grep=TRUE, gp=gpar(col="blue"))

答案 1 :(得分:3)

我怀疑你的分析是正确的。

但是,还有另外一种可能的解决方法:geom_hlinegeom_vline

baseplot + 
    geom_hline(yintercept=0, colour="red", size = 3) +
    geom_vline(xintercept=0, colour="blue", size = 2) 

再次不理想,因为如果你知道我的意思,线条会跨越整个绘图区域,而不仅仅是框架轴线。

enter image description here

答案 2 :(得分:2)

似乎你也可以通过适应主题来轻松实现它:

mytheme <- theme_classic()
mytheme$axis.line.x <- mytheme$axis.line.y <- mytheme$axis.line
mytheme$axis.line.x$colour <- 'red'
ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() + mytheme

enter image description here

答案 3 :(得分:1)

此问题指出您可以打开这两行,然后关闭其中一行:https://github.com/hadley/ggplot2/issues/778。我发现这个策略既简单又有效。