我可以阻止在ggplot中的轴线上绘制轴刻度吗?

时间:2018-03-28 19:04:53

标签: r ggplot2

我自定义ggplot图形的外观,主题涉及粗,暗的轴线。但是,我注意到一个带有刻度线和轴线的绘图将在绘制线条后绘制刻度线。

这对于细轴来说不是问题,因为刻度线始于默认轴线粗细的边缘。但是如果你使线条更粗,你最终会在线上绘制勾号:

ggplot(mpg, aes(cty, hwy)) +
    geom_col() +
    theme_light() +
    theme(axis.line.x = element_line(color = "black", size = 2),
          axis.line.y = element_line(color = "black", size = 2))

Ticks being drawn over the chart axis

有没有办法在轴线下绘制刻度线?要在轴线的范围而不是中点开始它们?或者以其他方式包括刻度线和与刻度线不同颜色的粗轴线而没有这种奇怪的重叠?感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用与axis.ticksaxis.ticks.length修改轴线的方式类似的方式修改刻度线。例如:

ggplot(mpg, aes(cty, hwy)) +
  geom_col() +
  theme_light() +
  theme(axis.line.x = element_line(color = "black", size = 2),
        axis.line.y = element_line(color = "black", size = 2),
        axis.ticks = element_line(color = "black", size = 2),
        axis.ticks.length = unit(2, "mm"))

答案 1 :(得分:0)

我不知道如何更改顺序,以便在ggplot中的轴线下绘制刻度线,但如果将绘图转换为grob,则可以完成。

为了示范,这里有一个丑陋但明显的色彩对比的情节:

p <- ggplot(mpg, aes(cty, hwy)) +
  geom_col() +
  theme_light() +
  theme(axis.line.x = element_line(color = "black", size = 2),
        axis.line.y = element_line(color = "black", size = 2),
        axis.ticks = element_line(color = "yellow", size = 1),
        axis.ticks.length = unit(5, "pt"),
        plot.background = element_rect(fill = "grey"))

original plot

在上图中,黄色刻度线明显位于黑轴线上方。

# convert to grob object
pg <- ggplotGrob(p) 

# swap order for y-axis
orig.order <- pg$grobs[[which(pg$layout$name == "axis-l")]]$childrenOrder
pg$grobs[[which(pg$layout$name == "axis-l")]]$childrenOrder <- orig.order[2:1]

# swap order for x-axis
orig.order <- pg$grobs[[which(pg$layout$name == "axis-b")]]$childrenOrder
pg$grobs[[which(pg$layout$name == "axis-b")]]$childrenOrder <- orig.order[2:1]

rm(orig.order)

# plot
grid::grid.draw(pg)

new plot

在上图中,黄色刻度线现在位于黑色轴线下方。