【问题标题】:R: ggplot2: position of ticks and labels in the absence of a gridR:ggplot2:在没有网格的情况下刻度和标签的位置
【发布时间】:2015-09-18 10:48:44
【问题描述】:

这是这个问题的后续:How can I suppress the vertical gridlines in a ggplot2 plot?

我有一个直方图,如下所示:

library(ggplot2)
data <- c(1,1,3,2,2,2,2,1,4,1,4,4,1)
his <- qplot(data, geom="histogram")

我删除了垂直网格线,使用

his + theme(panel.grid.major.x = element_blank(),
            panel.grid.minor.x = element_blank()
      )

现在发现x轴的刻度太低了,和轴之间有间隙。虽然我可以使用 vjust= 调整文本的位置,但似乎没有办法调整刻度的位置,或者是吗?

【问题讨论】:

  • Henrik 的评论当然是正确的。我只是想补充一点,ggplot2 总是在您绘制的数据周围添加一点空间。可以通过将以下内容添加到您的绘图 + scale_y_continuous(expand = c(0, 0)) 来避免这个空间。
  • 效果很好——谢谢!想要回答这个问题?

标签: r ggplot2 axis


【解决方案1】:

这是问题中的示例图:

library(ggplot2)
data <- c(1,1,3,2,2,2,2,1,4,1,4,4,1)
his <- qplot(data, geom="histogram") + 
         theme(panel.grid.major.x = element_blank(),
               panel.grid.minor.x = element_blank())

ggplot 计算要用于轴的范围时,它总是在两端添加一点空间以确保数据不会太靠近绘图的边界。您可以通过设置scale_y_continuous(以及其他比例)的expand 参数来防止它这样做:

his <- his + scale_y_continuous(expand = c(0, 0))

这解决了您删除刻度和数据之间的额外空间的问题。但是,您可能希望在数据之上留出一点空间。要添加它,您可以使用coord_cartesian,如下所示:

ymax <- max(table(data)) * 1.1
his + scale_y_continuous(expand = c(0, 0)) + 
      coord_cartesian(ylim = c(0, ymax))

我使用max(table(data)) 来获得直方图将具有的最大计数,然后为其添加 10% 的边距。请注意,这种固定直方图 y 轴范围的方法在手头的简单情况下效果很好,但在更复杂的情况下,箱实际上包含一系列值,您将需要更复杂的解决方案。当然,您总是可以只创建绘图,然后读取 ymax 的适当值。

这给出了以下情节:

我还要指出,刻度线和数据之间的空间与水平网格线的存在与否无关。因此,如果没有省略网格线,此解决方案也适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多