这里有一个相当具体的问题,但它可能会帮助其他有类似问题的人。
我有一些简单的数据:
Y = c(0.02, 0.03, 0.03, 0.04, 0.05, 0.06, 0.08, 0.09, 0.10, 0.13, 0.17, 0.17, 0.21, 0.22,
0.35, 0.47, 0.51, 0.53, 0.54, 0.65, 0.78)
X = c(0.45, 0.26, 0.35, 0.22, 0.37, 0.09, 0.27, 0.51, 0.39, 0.37, 0.37, 0.27, 0.51, 0.36,
0.44, 0.49, 0.63, 0.49, 0.71, 0.56, 0.67)
self1 = data.frame(X, Y)
我还有一个简单的自定义ggplot主题:
plot.theme = theme(axis.text = element_text(size=26), axis.title=element_text(size=28),
plot.title=element_text(size=36, margin=margin(0,0,20,0)), panel.grid.minor
= element_blank(), plot.margin=unit(c(0.1,0.25,0.5,0.85), "cm"), axis.title.y =
element_text(margin=margin(0,15,0,0)), panel.border = element_rect(color="black", fill=NA,
size=2), axis.ticks = element_blank(), legend.title = element_text(size=26), legend.text =
element_text(size=18))
当我用边缘直方图绘制数据的散点图时:
bing = ggplot(self1, aes(x=X, y=Y)) + geom_point(size=3) +
geom_smooth(method = "lm", se=F, color="black") +
plot.theme +
ylab("Observed selfing rate") +
xlab("Observed crossing rate") +
geom_vline(xintercept = 0.42, linetype="longdash") +
geom_hline(yintercept = 0.25, linetype="longdash")
ggExtra::ggMarginal(bing, type = "histogram", bins=6, size=10)
除了"观察到的交叉率"中的"g"在图的底部被截断之外,一切看起来都很好。我试着摆弄我能想到的每一个主题参数,我也试着将几个参数调整为ggMarginal
,但我还没有找到我需要更改的参数,以使所有内容都留在情节区域内。有人能帮我吗?我怀疑问题最终在于ggMarginal自动调整各种主题参数大小的方式,但这只是一种预感。
如果g
是您的绘图,您可以在绘制它(print或grid.draw)
g$vp = grid::viewport(height=0.9, width=0.9)
我还没有找到更改ggMarginal
返回的对象的绘图边距的方法。因此,在有人提出更好的解决方案之前,您可以修改ggMarginal
函数本身中的代码。方法如下:
在控制台中键入
ggMarginal
。这将打印ggMarginal
的代码。将此代码粘贴到脚本窗口中。为该函数指定一个新名称,如my_ggMarginal = [all the ggMarginal code you just pasted in]
。在此函数中查找以下行:
p <- p + ggplot2::theme(plot.margin = grid::unit(c(0, 0, 0, 0), "null"))
并将其更改为:
p <- p + ggplot2::theme(plot.margin = grid::unit(c(0, 0, 1, 0), "lines"))
运行刚刚创建的新函数的代码,以便
my_ggMarginal
在当前工作区中可用。在
bing
:上运行您的新功能my_ggMarginal(bing, type = "histogram", bins=6, size=10)