我可以使用xlim()
和ylim()
将ggplot2散点图强制为方形,并使用相同的x和y缩放,但需要手动计算限制。有没有更方便的方法呢?
方形我的意思是两个要求:
答案 0 :(得分:50)
如果您想使距离比例相同,请使用coord_fixed():
p <- ggplot(...)
p <- p + coord_fixed() # ratio parameter defaults to 1 i.e. y / x = 1
如果要确保结果图是方形的,那么您还需要指定x和y限制相同(或至少具有相同的范围)。 xlim
和ylim
都是coord_fixed
的参数。所以你可以使用这些参数手动完成。或者您可以使用函数从数据中提取限制。
答案 1 :(得分:34)
答案 2 :(得分:6)
可能是你今天看到的最丑陋的代码,但它可以解决这个问题。
x轴和y轴的范围可从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))
:
import clr
clr.CompileModules('C:/example.dll', 'C:/example.py')
答案 3 :(得分:1)
基于Ramons的回答,这个功能对我很有效,我认为它不那么难看,因为可以隐藏功能定义......
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变量是在“错误的”环境中定义的。
答案 4 :(得分:0)
先前答案中提供的所有解决方案均不适用于我的R版本:R版本3.6.1
ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
@Gerhard Burger在linked 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))