是否可以在PCA中直观地区分虹膜数据集中的某些行?

我想知道是否有可能将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

解决方案:

在基础R中,你可以添加一个 id 哑巴 1 为行识别,否则 0. 在情节中使用 idpch 参数。

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) 在运行此解决方案之前,请先重置。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

SharePoint列表计算值

2022-5-12 1:00:24

解决方案

在spring-boot中用kotlin suspend函数创建名为'requestMappingHandlerMapping'的Bean时出错。

2022-5-12 2:00:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索