强制散点图网格在ggpot2中为正方形

时间:2019-07-08 18:44:49

标签: r ggplot2 pca

我试图将散点图的网格强制为正方形,且 x y 值的范围不同。

我试图强制整个图的正方形(aspect.ratio = 1),但这不能解决不同范围的问题。然后,我尝试更改轴的值限制。

1)这是我首先尝试的方法:

p + theme(aspect.ratio = 1) +
    coord_fixed(ratio=1, xlim = c(-0.050,0.050),ylim = c(-0.03,0.03))

2)我通过使用每个轴的值范围来更改比率:

p + coord_fixed(ratio=0.06/0.10, xlim = c(-0.050,0.050), ylim = c(-0.03,0.03))

3)然后我更改了 y 的限制以匹配 x 的限制:

p + theme(aspect.ratio = 1) +
          coord_fixed(ratio=1, xlim = c(-0.050,0.050),ylim = c(-0.05,0.05))

1)背景上的网格由矩形组成。

Rectangles

2)我希望这会自动更改刻度线的位置,以便为我提供一个由正方形组成的网格。仍然是三角形。

still rectangles

3)显然有效,因为我匹配了 x y 的范围。但是图中有很多空白。

Squares but ugly

还有什么我应该尝试的吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您希望绘图为正方形,而您希望网格为正方形,则可以通过将y变量重新缩放为与x变量相同的比例(反之亦然)来缩放,然后反转重新缩放以为重新缩放的轴生成正确的轴值标签。

这是一个使用mtcars数据帧的示例,我们将使用rescale包中的scales函数。

首先让我们创建一个mpghp的图,但是将hp的值重新缩放为与mpg相同的比例:

library(tidyverse)
library(scales)
theme_set(theme_bw())

p = mtcars %>% 
  mutate(hp.scaled = rescale(hp, to=range(mpg))) %>% 
  ggplot(aes(mpg, hp.scaled)) +
  geom_point() +
  coord_fixed() +
  labs(x="mpg", y="hp")

enter image description here

现在,我们可以反转缩放比例,以为hp生成正确的值标签。我们在下面通过为labels的{​​{1}}自变量提供求反函数来做到这一点:

scale_y_continuous

enter image description here

但是请注意,重新缩放回原始的p + scale_y_continuous(labels=function(x) rescale(x, to=range(mtcars$hp))) 比例会导致非正常中断。我们可以通过在hp尺度上生成漂亮的中断,将其重新缩放为hp尺度,以获取想要的刻度线的位置,然后将其反转以获取标签值,来解决此问题。但是,在这种情况下,如果我们想使总体绘图面板保持正方形,就不会得到正方形网格:

mpg

enter image description here

答案 1 :(得分:0)

我不确定您使用的是什么代码,在第1块和第3块中缺少该代码。但是使用mtcars数据集可以进行以下工作:

library(ggplot2)

ggplot(mtcars, aes(mpg, wt)) + 
  geom_point() +
  coord_fixed(ratio = 1) +
  scale_x_continuous(breaks = seq(10, 35, 1)) +
  scale_y_continuous(breaks = seq(1, 6, 1))

最后两行清楚地表明,x轴上的1点等于y轴上的1点。

在文档中,您将进一步找到以下建议:

  

确保轴的范围等于指定的比率   调整绘图长宽比