如何解决如何从情节中删除特定组,但情节在R中保持不变?
data('iris')
pca.irix <- PCA(iris[,1:4])
gg <- factoextra::fviz_pca_biplot(X = pca.irix,# samples
fill.ind = iris$Species,col.ind = 'black',pointshape = 21,pointsize = 1.5,geom.ind = 'point',repel = T,geom.var = FALSE )
我想获得一个与上面的图完全一样的图,但没有实物setosa
。
我开始这样做,但不知道如何继续
setosa_wo <- iris %>%
filter(Species != 'setosa')
gg + scale_x_continuous(limits = c((-2),2)) + scale_y_continuous(limits = c((-2),2))
如何从图中删除有色组?但是情节应该保持不变。
解决方法
从图中删除一个或任意多个组的一种方法是过滤用于图层的数据,例如回顾gg$layers
,您的PCA图由六层组成,但是只有在前两层中,这些组才用作填充颜色。因此,我只过滤了这两层的数据,从而得到了删除setosa
的图。
编辑,按照 @DaveArmstrong 的建议,我添加了他的代码以将轴的范围固定在原始范围上,并另外添加了原始颜色
library(FactoMineR)
library(ggplot2)
pca.irix <- PCA(iris[,1:4])
gg <- factoextra::fviz_pca_biplot(X = pca.irix,# samples
fill.ind = iris$Species,col.ind = 'black',pointshape = 21,pointsize = 1.5,geom.ind = 'point',repel = T,geom.var = FALSE )
# First: Get the ranges
yrg <- ggplot2::layer_scales(gg)$y$range$range
xrg <- ggplot2::layer_scales(gg)$x$range$range
# Filter the data
gg$layers[[1]]$data <- dplyr::filter(gg$layers[[1]]$data,Fill. != "setosa")
gg$layers[[2]]$data <- dplyr::filter(gg$layers[[2]]$data,Fill. != "setosa")
gg +
# Set the limits to the original ones
ggplot2::coord_cartesian(xlim=xrg,ylim=yrg,expand=FALSE) +
# Add orignial colors
ggplot2::scale_fill_manual(values = scales::hue_pal()(3)[2:3])
由reprex package(v0.3.0)于2020-10-16创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。