R:ggplot2:没有网格时刻度和标签的位置
R: ggplot2: position of ticks and labels in the absence of a grid
这是这个问题的后续问题: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轴的ticks太低了,和轴之间有间隙。虽然我可以使用 vjust=
调整文本的位置,但似乎没有办法调整刻度的位置,是吗?
这是问题的示例图:
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
计算坐标轴的范围时,它总是在两端添加一点space以确保数据不会太靠近坐标轴的边界阴谋。您可以通过设置 scale_y_continuous
(以及其他比例)的 expand
参数来防止它这样做:
his <- his + scale_y_continuous(expand = c(0, 0))
这解决了您删除刻度和数据之间的附加 space 的问题。但是,您可能希望在数据之上添加一些 space。要添加它,您可以使用 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 轴范围的方法在手头的简单情况下效果很好,但在更复杂的情况下,即 bins 实际上包含一系列值,您将需要更复杂的解决方案。当然,您始终可以只创建绘图,然后读取 ymax
.
的适当值
这给出了以下情节:
我还要说明一下,刻度和数据之间的 space 与水平网格线的存在与否无关。因此,如果不省略网格线,此解决方案也适用。
这是这个问题的后续问题: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轴的ticks太低了,和轴之间有间隙。虽然我可以使用 vjust=
调整文本的位置,但似乎没有办法调整刻度的位置,是吗?
这是问题的示例图:
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
计算坐标轴的范围时,它总是在两端添加一点space以确保数据不会太靠近坐标轴的边界阴谋。您可以通过设置 scale_y_continuous
(以及其他比例)的 expand
参数来防止它这样做:
his <- his + scale_y_continuous(expand = c(0, 0))
这解决了您删除刻度和数据之间的附加 space 的问题。但是,您可能希望在数据之上添加一些 space。要添加它,您可以使用 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 轴范围的方法在手头的简单情况下效果很好,但在更复杂的情况下,即 bins 实际上包含一系列值,您将需要更复杂的解决方案。当然,您始终可以只创建绘图,然后读取 ymax
.
这给出了以下情节:
我还要说明一下,刻度和数据之间的 space 与水平网格线的存在与否无关。因此,如果不省略网格线,此解决方案也适用。