首页 文章

R在最大值和最小值处绘制y轴刻度线

提问于
浏览
3

我需要绘制相同两个变量的多个图,但y值的范围在图中不同 . 为了简化y轴,我希望每个图显示仅在y轴的最小和最大范围显示刻度线和标签(图的最小值/最大值,而不是数据) .

我玩过usr和yaxp参数,但没有运气 . 这是一个玩具示例:

x<-1:10
y<-3:12
plot(x,y,yaxp=c(par("usr")[3],par("usr")[4],1))

我希望沿y轴对应于图的顶部和底部的刻度线/标签(中间没有),但这并不会在y轴上放置任何刻度线或标签 . 任何人都可以解释为什么以及如何返回所需的结果?

谢谢!

2 回答

  • 2

    在实际绘图之前, usr 值对于您的数据将不正确 . 获取正确值的一种方法是首先绘制,获取值,然后使用这些值再次绘制刻度线:

    plot(x, y)
    
    min_tick <- par("usr")[3]
    max_tick <- par("usr")[4]
    
    plot(x, y, yaxt = "n") 
    axis(side = 2, at = c(min_tick, max_tick))
    

    enter image description here

    我正在让默认标签出现 . 这是可以根据需要定制的东西 .

    正如@ 42指出的那样,轴的默认绘图行为是将数据范围扩展4% . 因此,可以使用该信息计算最小值和最大值:

    min_tick <- min(y) - (max(y) - min(y)) * 0.04
    max_tick <- max(y) + (max(y) - min(y)) * 0.04
    
  • 5

    就在这里, ggplot2 等效于设置 breaksbreaks

    library(ggplot2)
    
    ggplot(data.frame(x, y), aes(x, y)) + 
        geom_point() + 
        scale_y_continuous(breaks = c(min(y), max(y)))
    

    plot with y breaks at min and max

相关问题