我认为您可以使用 xlim
和 ylim
。此外,请查看 ?biplot
中的 expand
参数。不幸的是,您没有提供任何数据,因此让我们使用一些示例数据:
a <- princomp(USArrests)
以下是仅调用biplot
的结果:
biplot(a)
现在,使用xlim
和ylim
可以“放大”以更仔细地查看“谋杀”和“强奸”,还可以使用?biplot
中的缩放参数expand
:
biplot(a, expand=10, xlim=c(-0.30, 0.0), ylim=c(-0.1, 0.1))
请注意由于
expand
因子不同,顶部和右侧轴的比例尺不同。
这有助于使您的图表更易读吗?
编辑:
您还问是否可以为标签和箭头使用不同的颜色。
biplot
不支持此操作,但您可以复制
stats:::biplot.default
代码,并根据需要进行更改(在使用
plot
、
axis
和
text
时更改
col
参数)。
或者,您可以使用
ggplot
绘制双图。在
这里的帖子中,实现了一个简单的双图函数。您可以按以下方式更改代码:
PCbiplot <- function(PC, x="PC1", y="PC2", colors=c('black', 'black', 'red', 'red')) {
data <- data.frame(obsnames=row.names(PC$x), PC$x)
plot <- ggplot(data, aes_string(x=x, y=y)) + geom_text(alpha=.4, size=3, aes(label=obsnames), color=colors[1])
plot <- plot + geom_hline(aes(0), size=.2) + geom_vline(aes(0), size=.2, color=colors[2])
datapc <- data.frame(varnames=rownames(PC$rotation), PC$rotation)
mult <- min(
(max(data[,y]) - min(data[,y])/(max(datapc[,y])-min(datapc[,y]))),
(max(data[,x]) - min(data[,x])/(max(datapc[,x])-min(datapc[,x])))
)
datapc <- transform(datapc,
v1 = .7 * mult * (get(x)),
v2 = .7 * mult * (get(y))
)
plot <- plot + coord_equal() + geom_text(data=datapc, aes(x=v1, y=v2, label=varnames), size = 5, vjust=1, color=colors[3])
plot <- plot + geom_segment(data=datapc, aes(x=0, y=0, xend=v1, yend=v2), arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color=colors[4])
plot
}
请按如下方式绘制:
fit <- prcomp(USArrests, scale=T)
PCbiplot(fit, colors=c("black", "black", "red", "yellow"))
如果您稍微尝试一下这个函数,我相信您可以弄清如何设置xlim
和ylim
值等。