以下是ggplot wiki:
中的ggplotbaseplot <- ggplot(data.frame(x=1:10, y=10:1)) +
geom_point(aes(x = x, y = y))
baseplot
是否可以单独控制这些轴,例如只做x轴黑色? axis.line.x
和axis.line.y
似乎不是选项之一。
维基表明,例如,可以控制轴的颜色
baseplot + opts(axis.line = theme_segment(colour = 'black', size = 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))
答案 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_hline
和geom_vline
:
baseplot +
geom_hline(yintercept=0, colour="red", size = 3) +
geom_vline(xintercept=0, colour="blue", size = 2)
再次不理想,因为如果你知道我的意思,线条会跨越整个绘图区域,而不仅仅是框架轴线。
答案 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
答案 3 :(得分:1)
此问题指出您可以打开这两行,然后关闭其中一行:https://github.com/hadley/ggplot2/issues/778。我发现这个策略既简单又有效。