强制ggplot2散点图为方形

Ali*_*Ali 41 r scatter-plot ggplot2

我可以强制GGPLOT2散点图被方形具有相同的x和使用y缩放比例xlim()ylim(),但它需要的限制人工计算.有没有更方便的方法呢?

方形我指的是两个要求:

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

mys*_*mys 50

如果要使距离比例相同,则使用coord_fixed():

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

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

  • 谢谢,它使x和y轴成为相同的比例,但不强制绘图是方形的 - x和y轴的长度可以不同 (8认同)

bap*_*ste 36

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

ggplot() + theme(aspect.ratio=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这会强制绘图背景区域为方形,而不是(必然)绘图数据区域.另外,``ggsave``可能不会(几乎肯定不会)输出正方形图像,但会用白色填充它,这样如果你的背景颜色为白色,你保存的图形看起来就不是正方形(如果你的背景是彩色的,它将被白色填充物包围).根据您的目的,此选项应与其他选项一起使用.你总是可以在``ggsave``中调整``width``和``height``选项. (2认同)

Ram*_*mon 6

可能是你今天看到的最丑陋的代码,但它可以解决问题.

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))
Run Code Online (Sandbox Code Playgroud)


小智 6

虽然是一篇较旧的文章,但对我来说,这仍然是谷歌上的热门文章。

包中的这个函数tune现在似乎可以完成此任务:

p <- 
  mtcars %>% 
  ggplot(aes(drat, wt)) + 
  geom_abline(slope = 1, intercept = 0) +
  geom_point()
p
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

p + tune::coord_obs_pred()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Goo*_*ill 5

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

ggplot_build(pot)$panel$ranges[[1]]$x.range # return NULL value
Run Code Online (Sandbox Code Playgroud)

@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))
Run Code Online (Sandbox Code Playgroud)