我试图将散点图的网格强制为正方形,且 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)背景上的网格由矩形组成。
2)我希望这会自动更改刻度线的位置,以便为我提供一个由正方形组成的网格。仍然是三角形。
3)显然有效,因为我匹配了 x 和 y 的范围。但是图中有很多空白。
还有什么我应该尝试的吗?
谢谢。
答案 0 :(得分:1)
如果您希望绘图为正方形,而您希望网格为正方形,则可以通过将y变量重新缩放为与x变量相同的比例(反之亦然)来缩放,然后反转重新缩放以为重新缩放的轴生成正确的轴值标签。
这是一个使用mtcars
数据帧的示例,我们将使用rescale
包中的scales
函数。
首先让我们创建一个mpg
与hp
的图,但是将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")
现在,我们可以反转缩放比例,以为hp
生成正确的值标签。我们在下面通过为labels
的{{1}}自变量提供求反函数来做到这一点:
scale_y_continuous
但是请注意,重新缩放回原始的p + scale_y_continuous(labels=function(x) rescale(x, to=range(mtcars$hp)))
比例会导致非正常中断。我们可以通过在hp
尺度上生成漂亮的中断,将其重新缩放为hp
尺度,以获取想要的刻度线的位置,然后将其反转以获取标签值,来解决此问题。但是,在这种情况下,如果我们想使总体绘图面板保持正方形,就不会得到正方形网格:
mpg
答案 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点。
在文档中,您将进一步找到以下建议:
确保轴的范围等于指定的比率 调整绘图长宽比