我正在从基本的 R 绘图工具切换到 ggplot2 并且正在努力解决一个问题。
在基本 R 中,您可以通过设置边距来控制与四个轴(或“框”)中的每一个轴的距离。产生的边距是固定的,不取决于您绘制的内容。尽管刻度标签和轴标签的大小不同,这些使我可以为我的论文生成绘图区域大小完全相同的绘图。
在 ggplot 中,我遇到了这个(最小工作示例):
library(ggplot2)
dat = data.frame(x = 1:5, y = 1e-5* (1:5) ^ 2)
p = ggplot(dat, aes(x, y)) + geom_point() + geom_line()
print(p)
print(p + scale_y_log10())
图左侧的黑色箭头显示了我得到的实际边距之间的差异。轴标签(
y
)保持原位,而 y
的位置-axis 根据刻度标签(文本表示)的大小而变化。可以通过更改 axis.text.y
进一步升级例如增加size
.我想要的是无论绘制什么刻度标签都能够控制实际边距 - 在这种情况下,我可以获得不同数据集的相同大小的数字。
最佳答案
尽管 ggplot2 中有许多主题选项,但似乎没有为轴设置固定边距空间的选项(或者如果有的话它隐藏得很好)。 cowplot
包有一个 align_plots 函数,它可以对齐绘图列表中的一个或两个轴。 align_plots
返回一个列表,其中的每个组件都是原始图,但指定的轴对齐。我正在使用 gridExtra
中的 grid.arrange 函数包输出两个图,以便您可以看到对齐的工作方式:
library(ggplot2)
dat = data.frame(x = 1:5, y = 1e-5* (1:5) ^ 2)
p = ggplot(dat, aes(x, y)) + geom_point() + geom_line()
print(p)
p1 = p + scale_y_log10()
print(p1)
library(cowplot)
library(gridExtra)
p2 = align_plots(p, p1, align = "hv")
grid.arrange(p2[[1]], p2[[2]])
这是两个原始图的输出方式:
grid.arrange(p, p1)
关于r - ggplot边距 - 改变到轴的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592613/