gpt4 book ai didi

R - 如何在箱线图和 matplot 之间排列 Axis ?

转载 作者:行者123 更新时间:2023-12-04 03:59:02 24 4
gpt4 key购买 nike

我在 R 中创建了一个并排图,其中两个图应该使用相同的 y Axis 。然而,左边的图是一个 boxplot ,右边的图是一个 matplot 并且在两个图中我设置了相同的 y Axis 范围 ylim = c(0, YMAX)。不幸的是,正如您在下面看到的,这些图似乎没有使用相同的布局范围——barplot 将范围恰好放在 Axis 的边缘,而 matplot 在 Axis 的每个边缘都有一个缓冲区。因此,图上的 y Axis 未按预期排列。

#Create layout for plot
LAYOUT <- matrix(c(rep(1, 2), 2:3), nrow = 2, ncol = 2, byrow = TRUE);
layout(LAYOUT, heights = c(0.1, 1));

#Create plot matrix
par(mar = c(0.5, 2.1, 0.5, 2.1), mgp = c(3, 1, 0), las = 0);
plot.new();
text(0.5,0.5, 'Barplot and Violin Plot', cex = 1.2, font = 2);
par(mar = c(5.1, 4.1, 2.1, 2.1), mgp = c(3, 1, 0), las = 0);

#Generate data for plot
x <- 1:100
y <- rchisq(100, df = 40);

#Generate plots
DENS <- density(y);
YMAX <- 1.4*max(y);
barplot(y, names.arg = x, ylim = c(0, YMAX));
matplot(x = cbind(-DENS$y, DENS$y), y = DENS$x,
type = c('l', 'l'), lty = c(1, 1),
col = c('black', 'black'),
xlim = c(-max(DENS$y), max(DENS$y)),
ylim = c(0, YMAX),
xlab = 'Density', ylab = '');

enter image description here

如何调整此图以使 y Axis 对齐? (理想情况下,我希望右侧的绘图将刻度线放在 Axis 的边缘,就像左侧的情况一样。)

最佳答案

user20650的评论解决了我的问题,因此我将冒昧地将其扩展为更大的答案并链接到我找到的有关该问题的一些文档。根据一些lecture notes在基本图形参数上,R 中的某些基本绘图默认在指定的 Axis 范围之外添加 6% 的缓冲区。命令 xasx = 'i'yasx = 'i' inhibit 这个缓冲区(分别在 x 和 y Axis 上),这样 Axis 限制恰好位于 Axis 的边缘。

将此解决方案应用于当前问题中的 y Axis (我们不将其应用于 x Axis ,因为我们想保留该 Axis 上的缓冲区)给出以下命令和绘图。从图中可以看出,两个图中的 y Axis 现在正确对齐。万岁!

#Create layout for plot
LAYOUT <- matrix(c(rep(1, 2), 2:3), nrow = 2, ncol = 2, byrow = TRUE);
layout(LAYOUT, heights = c(0.1, 1));

#Create plot matrix
par(mar = c(0.5, 2.1, 0.5, 2.1), mgp = c(3, 1, 0), las = 0);
plot.new();
text(0.5,0.5, 'Barplot and Violin Plot', cex = 1.2, font = 2);
par(mar = c(5.1, 4.1, 2.1, 2.1), mgp = c(3, 1, 0), las = 0);

#Generate data for plot
x <- 1:100
y <- rchisq(100, df = 40);

#Generate plots
DENS <- density(y);
YMAX <- 1.4*max(y);
barplot(y, names.arg = x, ylim = c(0, YMAX));
matplot(x = cbind(-DENS$y, DENS$y), y = DENS$x, yaxs = 'i',
type = c('l', 'l'), lty = c(1, 1),
col = c('black', 'black'),
xlim = c(-max(DENS$y), max(DENS$y)),
ylim = c(0, YMAX),
xlab = 'Density', ylab = '');

enter image description here

关于R - 如何在箱线图和 matplot 之间排列 Axis ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63356643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com