使用自由位置缩放,但在 ggplot2 中固定缩放
Scales with free locations but fixed scaling in ggplot2
是否可以在 facet_wrap
或 facet_grid
内释放比例尺的位置,但固定 比例尺 (即刻度线之间的距离)?
fixed
选项同时固定给定比例尺的位置和比例尺。例如,在下面,每个窗格都具有相同的限制和缩放比例:
library(ggplot2)
ggplot(within(mtcars,
split <- rowSums(sapply(c(.3,.5,.6),function(x) disp> quantile(disp,x))%*%(1:3))),
aes(mpg, hp)) + geom_point() + stat_smooth(method='lm', se=F) +
facet_wrap(~split, scales = 'fixed')
另一方面,free
选项允许位置和缩放在不同窗格之间变化:
ggplot(within(mtcars,
split <- rowSums(sapply(c(.3,.5,.6),function(x) disp> quantile(disp,x))%*%(1:3))),
aes(mpg, hp)) + geom_point() + stat_smooth(method='lm', se=F) +
facet_wrap(~split, scales = 'free_y')
是否可以允许刻度中心变化但固定刻度线之间的距离?在上面的示例中,这相当于让每个刻度以窗格的 y 平均值为中心,但将刻度线之间的距离固定为 50。请注意,这不能使用 space
或 aspect.ratio
来解决选项。
我不知道有任何选项可以直接在分面系统中执行此操作(除非您深入研究自定义分面),但使用旧的“隐形框”技巧可以轻松实现。基本上你只需确保每个面板都有一个不可见的框,在组 y 均值的上方和下方绘制一个固定值,并在 x 均值的任一侧绘制一个固定距离:
ggplot(within(mtcars, {
split <- rowSums(sapply(c(.3,.5,.6),
function(x) disp > quantile(disp, x)) %*% (1:3));
mins <- ave(hp, split) - 100;
maxs <- ave(hp, split) + 100;
minx <- ave(mpg, split) -8;
maxx <- ave(mpg, split) +8;
}),
aes(mpg, hp)) +
geom_point() +
geom_rect(aes(xmin = minx, xmax = maxx, ymin = mins, ymax = maxs),
alpha = 0, colour = "#00000000") +
stat_smooth(method='lm', se=F) +
facet_wrap(~split, scales = 'free')
您可以看到所有 4 个图的比例大小都相同,但每个点簇都以其 x 均值和 y 均值在图的中点为中心。
是否可以在 facet_wrap
或 facet_grid
内释放比例尺的位置,但固定 比例尺 (即刻度线之间的距离)?
fixed
选项同时固定给定比例尺的位置和比例尺。例如,在下面,每个窗格都具有相同的限制和缩放比例:
library(ggplot2)
ggplot(within(mtcars,
split <- rowSums(sapply(c(.3,.5,.6),function(x) disp> quantile(disp,x))%*%(1:3))),
aes(mpg, hp)) + geom_point() + stat_smooth(method='lm', se=F) +
facet_wrap(~split, scales = 'fixed')
另一方面,free
选项允许位置和缩放在不同窗格之间变化:
ggplot(within(mtcars,
split <- rowSums(sapply(c(.3,.5,.6),function(x) disp> quantile(disp,x))%*%(1:3))),
aes(mpg, hp)) + geom_point() + stat_smooth(method='lm', se=F) +
facet_wrap(~split, scales = 'free_y')
是否可以允许刻度中心变化但固定刻度线之间的距离?在上面的示例中,这相当于让每个刻度以窗格的 y 平均值为中心,但将刻度线之间的距离固定为 50。请注意,这不能使用 space
或 aspect.ratio
来解决选项。
我不知道有任何选项可以直接在分面系统中执行此操作(除非您深入研究自定义分面),但使用旧的“隐形框”技巧可以轻松实现。基本上你只需确保每个面板都有一个不可见的框,在组 y 均值的上方和下方绘制一个固定值,并在 x 均值的任一侧绘制一个固定距离:
ggplot(within(mtcars, {
split <- rowSums(sapply(c(.3,.5,.6),
function(x) disp > quantile(disp, x)) %*% (1:3));
mins <- ave(hp, split) - 100;
maxs <- ave(hp, split) + 100;
minx <- ave(mpg, split) -8;
maxx <- ave(mpg, split) +8;
}),
aes(mpg, hp)) +
geom_point() +
geom_rect(aes(xmin = minx, xmax = maxx, ymin = mins, ymax = maxs),
alpha = 0, colour = "#00000000") +
stat_smooth(method='lm', se=F) +
facet_wrap(~split, scales = 'free')
您可以看到所有 4 个图的比例大小都相同,但每个点簇都以其 x 均值和 y 均值在图的中点为中心。