Можно ли визуально различить guish определенных строк в наборе данных радужной оболочки в PCA? - PullRequest
1 голос
/ 23 апреля 2020

Интересно, можно ли отличить guish, например, три первых строки в наборе данных virginica от остальных. Я думаю, что это можно сделать, придав им другую форму. Есть идеи?

iris
plot = function (data) {
  data = data %>%
    as.data.frame() %>%
    mutate(Species = iris$Species)
  cols = as.list(setNames(colnames(data), c('x', 'y', 'color')))
  ggplot(data, do.call(aes_string, cols)) + geom_point() + coord_fixed()
}

petal_data = select(iris, Petal.Width, Petal.Length)
pca <- prcomp(petal_data)
rotated_petals <- as.data.frame(pca$x)
plot(rotated_petals)

enter image description here

1 Ответ

1 голос
/ 23 апреля 2020

В базе R вы можете добавить id манекен, который равен 1 для строк, которые нужно идентифицировать, иначе 0. В графике используйте id в качестве значения для параметра pch.

iris2 <- transform(iris, Species=as.character(Species), id=0)
iris2[1:3, "id"] <- 1

petal_data <- iris2[c("Petal.Width", "Petal.Length")]
rotated_petals <- data.frame(prcomp(petal_data)$x, Species=iris2$Species, id=iris2$id, 
                             stringsAsFactors=F)

u.spec <- unique(rotated_petals$Species)
col. <- 1:length(u.spec)
incr.pch <- 1

plot(rotated_petals[-(3:4)], type="n")
sapply(seq(u.spec), function(x) 
  with(rotated_petals[rotated_petals$Species == u.spec[x], ],
       points(PC1, PC2, col=col.[x] + 1, pch=id + incr.pch)))
legend("topleft", legend=c(u.spec, "identified"), col=c(col., "grey50"), 
       pch=c(1, 1, 1, 1 + incr.pch), horiz=T, bty="n", cex=.9)

Результат

enter image description here

Примечание , что вы пытаетесь переопределить базовую функцию R plot, что является плохой идеей. Используйте rm(plot) для сброса перед запуском этого решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...