R 强制ggplot2散点图为方形

R 强制ggplot2散点图为方形,r,ggplot2,scatter-plot,R,Ggplot2,Scatter Plot,我可以使用xlim()和ylim()强制ggplot2散点图为方形,具有相同的x和y比例,但它需要手动计算限制。还有更方便的方法吗 所谓方形,我指的是两个要求: x轴和y轴上的比例相同 x轴和y轴的等长 如果要使距离比例点相同,请使用: p可能是你今天看到的最丑陋的代码,但它确实做到了 可以从ggplot\u build访问x轴和y轴的范围: r<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$x.range)) s<-max(a

我可以使用
xlim()
ylim()
强制ggplot2散点图为方形,具有相同的x和y比例,但它需要手动计算限制。还有更方便的方法吗

所谓方形,我指的是两个要求:

  • x轴和y轴上的比例相同
  • x轴和y轴的等长
    如果要使距离比例点相同,请使用:


    p可能是你今天看到的最丑陋的代码,但它确实做到了

    可以从
    ggplot\u build
    访问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))
    
    r注:对于方形(不考虑绘制的数据)


    RAMON的回答,这个函数对我来说很好,我认为它不是丑陋的,因为它可以隐藏函数定义…

    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))
    }
    

    squarePlot前面答案中提供的所有解决方案都不适用于我的R版本:R版本3.6.1

    ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
    
    @Gerhard Burger在我的案例中提到的解决方案:

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

    rBy“方形”您的意思是希望
    x
    方向上一个单位的长度与
    y
    方向上的长度相同(意思是如果
    x
    从0变为5,
    y
    从0变为6,
    y
    尺寸将变长一个单位),或者你的意思是希望整个x轴的长度与y轴的长度相同(因此在上一个示例中,
    y
    的每个单位都比
    x
    的每个单位短,但整个图形看起来是方形的)?@baptiste:我认为你应该将此作为一个答案。在基本绘图中,它似乎与
    asp=1
    类似。@DWin似乎没有一个建议的答案使绘图呈方形,它们都使x和y比例相同。如果形状重要,请使用
    主题(纵横比=1)
    ,但要回答您的问题,我认为在ggplot2中没有这样做的功能。您可以使用
    扩展\u限制
    ,但我相信您必须以某种方式手动计算数据的最小值和最大值。感谢您,它使x轴和y轴具有相同的比例,但不会强制绘图为方形-即x轴和y轴的长度可能与此想法不同,但这对我的ggplot对象不起作用。我得到的最接近的是内部
    ggplot\u build(qq)$plot$scales$scales
    ,但它仍然不起作用。因此,我最终手动计算极限并按1.3的比例缩放。
    ggplot\u build
    一直在变化,我认为目前是首选的方法。这迫使绘图背景区域为正方形,而不是(必然)绘图数据区域。此外,
    ggsave
    可能不会(几乎肯定不会)输出方形图像,但会将其填充为白色,这样,如果背景颜色为白色,则保存的图形将不会显示为方形(如果背景为彩色,则会被白色填充包围)。根据您的目的,此选项应与其他选项一起使用。您可以随时调整
    ggsave
    中的
    width
    height
    选项。
    ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
    
    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))