R-style axes with ggplot

前端 未结 1 1799
甜味超标
甜味超标 2020-12-10 04:28

Using ggplot, is it possible to get \"R-style\" x/y axes that don\'t meet at the origin and that instead consist of two disconnected ranges, as in the following example?

相关标签:
1条回答
  • 2020-12-10 05:10

    Try this,

    library(ggplot2)
    
    d <- data.frame(x=1:10, y=rnorm(10))
    
    base_breaks_x <- function(x){
      b <- pretty(x)
      d <- data.frame(y=-Inf, yend=-Inf, x=min(b), xend=max(b))
      list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE),
           scale_x_continuous(breaks=b))
    }
    base_breaks_y <- function(x){
      b <- pretty(x)
      d <- data.frame(x=-Inf, xend=-Inf, y=min(b), yend=max(b))
      list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE),
           scale_y_continuous(breaks=b))
    }
    
    ggplot(d, aes(x,y)) +
      geom_point() +
      theme_bw() +
      theme(panel.border = element_blank(),
           panel.grid.major = element_blank(),
           panel.grid.minor = element_blank()) +
      base_breaks_x(d$x) +
      base_breaks_y(d$y)
    

    screenshot

    Edit: a related issue has since been discussed in the ggtheme package, and potentially provides a cleaner solution (no need to provide the data explicitly to the breaks function).

    0 讨论(0)
提交回复
热议问题