我認爲你可以使用xlim
和ylim
。另外,請查看?biplot
的expand
參數。不幸的是,你沒有提供任何數據,因此我們需要一些樣本數據:
a <- princomp(USArrests)
下面的只是打電話biplot
結果:
biplot(a)
而現在人們可以「放大「使用xlim
和ylim
以及使用從?biplot
:
012的縮放參數
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
作爲雙標圖。在帖子here中,實現了簡單的雙插槽功能。你可以按如下方式更改代碼:
PCbiplot <- function(PC, x="PC1", y="PC2", colors=c('black', 'black', 'red', 'red')) {
# PC being a prcomp object
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
值等。
謝謝,之前我在控制檯中收到很多警告,但現在它的工作。 也許你也可以解釋關於顏色的附加問題。 –
@Colors - 這就是我的預期,感謝您的現成代碼 順便說一句,「複製源代碼並修改它」在R?我並沒有質疑你的anwser的有效性,但從軟件工程的角度來看這是一個相當可疑的做法。 –
在最後一個筆記中,我不指望有可能有一個矩形與雙標圖。 在你的例子中,geom_hline和geom_vline調用是否需要改變? –