强制ggplot2散点图为方形

时间:2012-11-18 23:33:53

标签: r ggplot2 scatter-plot

我可以使用xlim()ylim()将ggplot2散点图强制为方形,并使用相同的x和y缩放,但需要手动计算限制。有没有更方便的方法呢?

方形我的意思是两个要求:

  1. x和y轴上的相同比例。
  2. x和y轴的长度相等。

5 个答案:

答案 0 :(得分:50)

如果您想使距离比例相同,请使用coord_fixed()

p <- ggplot(...)
p <- p + coord_fixed() # ratio parameter defaults to 1 i.e. y / x = 1

如果要确保结果图是方形的,那么您还需要指定x和y限制相同(或至少具有相同的范围)。 xlimylim都是coord_fixed的参数。所以你可以使用这些参数手动完成。或者您可以使用函数从数据中提取限制。

答案 1 :(得分:34)

注意:对于方形(无论绘制的数据如何),

ggplot() + theme(aspect.ratio=1)

enter image description here

答案 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))