xlim()
我可以使用and强制 ggplot2 散点图为方形,具有相同的 x 和 y 缩放比例ylim()
,但它需要手动计算限制。有没有更方便的方法呢?
方形我的意思是两个要求:
- x 和 y 轴上的比例相同。
- x 和 y 轴的长度相等。
xlim()
我可以使用and强制 ggplot2 散点图为方形,具有相同的 x 和 y 缩放比例ylim()
,但它需要手动计算限制。有没有更方便的方法呢?
方形我的意思是两个要求:
如果要使距离刻度点相同,请使用coord_fixed():
p <- ggplot(...)
p <- p + coord_fixed() # ratio parameter defaults to 1 i.e. y / x = 1
如果要确保结果图是正方形的,则还需要将 x 和 y 限制指定为相同(或至少具有相同的范围)。xlim
并且ylim
都是coord_fixed
. 因此,您可以使用这些参数手动执行此操作。或者您可以使用函数从数据中提取限制。
可能是您今天看到的最丑陋的代码,但它确实有效。
您的 x 和 y 轴的范围可从以下位置访问ggplot_build
:
r<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$x.range))
s<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$y.range))
t<-round(max(r,s),1)
your_plot<-your_plot+coord_equal(xlim=c(-t,t),ylim=c(-t,t))
之前答案中提供的所有解决方案都不适用于我的 R 版本:R 版本 3.6.1。
ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
@Gerhard Burger 在链接 URL中提到的解决方案适用于我的情况:
r<-max(abs(layer_scales(plt)$x$range$range))
s<-max(abs(layer_scales(plt)$y$range$range))
t<-round(max(r,s),1)
plt<-plt+coord_equal(xlim=c(0,t),ylim=c(0,t))
基于拉蒙斯的回答,这个函数对我来说很好用,我认为它并不难看,因为可以隐藏函数定义......
squarePlot <- function(plt){
return(plt+coord_equal()+
expand_limits(x=ggplot_build(plt)$panel$ranges[[1]]$y.range,
y=ggplot_build(plt)$panel$ranges[[1]]$x.range))
}
只是将 Ramon 的代码包装在一个函数中对我来说不起作用,因为 t 变量是在“错误”环境中定义的。