#r
Вопрос:
Я пытаюсь завершить анализ основных компонентов набора данных, содержащего столбцы числовых данных.
Предполагая набор данных, подобный этому (на самом деле у меня есть предварительно настроенный фрейм данных, этот, если для воспроизводимости):
v1 <- c(1,2,3,4,5,6,7)
v2 <- c(3,6,2,5,2,4,9)
v3 <- c(6,1,4,2,3,7,5)
dataset <-data.frame(v1,v2,v3)
row.names(dataset) <-c('New York', 'Seattle', 'Washington DC', 'Dallas', 'Chicago','Los Angeles','Minneapolis')
Я провел свой анализ основных компонентов и успешно построил его:
pca=prcomp(dataset,scale=TRUE)
plot(pca$x[,1], pca$x[,2],
xlab="First PC",ylab="Second PC")
text(pca$x[,1], pca$x[,2],cex=0.7,pos=3,col="darkgrey")
Однако я хочу, чтобы мои точки данных были закодированы цветом на основе города, который является именами строк моего набора данных. Я также хочу использовать эти города (т. Е. названия строк) в качестве меток.
Я пробовал следующее, но ни то, ни другое не сработало:
## attempt 1 - I get row labels, but no chart
plot(pca$x[,1], pca$x[,2],col=rownames(dataset),pch=rownames(dataset),
xlab="First PC",ylab="Second PC")
text(pca$x[,1], pca$x[,2],labels=rownames(dataset),cex=0.7,pos=3,col="darkgrey")
## attempt 2
datasetwithcity = rownames_to_column(dataset, var = "city")
head(datasetwithcity)
OnlyCities=datasetwithcity[,1]
OnlyCities
# this didn't work:
City_Labels=as.numeric(OnlyCities)
head(City_Labels)
# gets city labels, but loses points and no colour
plot(pca$x[,1], pca$x[,2],col=City_Labels,pch=City_Labels,
xlab="First PC",ylab="Second PC")
text(pca$x[,1], pca$x[,2],labels=rownames(dataset),
cex=0.7,pos=3,col="darkgrey")
Ответ №1:
Есть много разных способов сделать это.
В базе R вы могли бы сделать:
plot(pca$x[,1], pca$x[,2],
xlab="First PC",ylab="Second PC", col = seq(nrow(pca$x)),
xlim = c(-2.5, 2.5), ylim = c(-2, 2))
text(pca$x[,1], pca$x[,2],cex=0.7,pos=3,col="darkgrey")
text(x = pca$x[,1], y = pca$x[,2], labels = rownames(pca$x), pos = 1)
Лично я думаю, что полученная эстетика приятнее (и ее легче изменить в соответствии с вашими потребностями) ggplot
. Код также немного легче читать, как только вы привыкнете к синтаксису.
library(ggplot2)
df <- as.data.frame(pca$x)
df$city <- rownames(df)
ggplot(df, aes(PC1, PC2, color = city))
geom_point(size = 3)
geom_text(aes(label = city) , vjust = 2)
lims(x = c(-2.5, 2.5), y = c(-2, 2))
theme_bw()
theme(legend.position = "none")
Создано 2021-10-28 пакетом reprex (v2.0.0)