#r #visualization #pca
Вопрос:
Я попытался нарисовать модифицированный график PCA, представляющий два типа категорий.
Например, я хочу нарисовать PCA с 1) эллипсом PCA на основе Королевства, 2) точками выборки PCA, окрашенными переменной класса.
Вот пример набора данных.
require(ggplot2)
require(ggfortify)
set.seed(1)
df <- structure(list(Sample = c("cat", "dog", "rabbit", "chicken", "duck", "butterfly", "ladybug", "rose", "lily", "iris", "maple tree", "pinetree", "ginkgo"),
Class = c("mammalia", "mammalia", "mammalia", "bird", "bird", "insect", "insect", "flower", "flower", "flower", "tree", "tree", "tree"),
Kingdom = c("animalia", "animalia", "animalia", "animalia", "animalia", "animalia", "animalia", "plantae", "plantae", "plantae", "plantae", "plantae", "plantae")),
class = "data.frame", row.names = c(NA, -13L))
rownames(df)<-df[,1]
df[,1]<-NULL
for(i in 3:20){
df[,i]<-sample(100, size=nrow(df), replace=TRUE)
}
df[,c(3:20)]<-log(df[,c(3:20)] 1, base=2)
df #I ommitted the value from v13 to v20 for simplicity
Class Kingdom V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
cat mammalia animalia 6.108524 5.781360 5.087463 5.357552 4.247928 5.614710 5.000000 5.129283 5.321928 6.303781
dog mammalia animalia 5.321928 6.228819 6.409391 5.491853 4.523562 6.491853 4.169925 3.459432 4.643856 4.523562
rabbit mammalia animalia 1.000000 3.000000 5.169925 4.700440 6.303781 4.584963 6.209453 1.000000 5.754888 6.149747
chicken bird animalia 5.129283 6.209453 6.149747 6.149747 6.044394 6.409391 6.459432 5.459432 6.539159 4.857981
duck bird animalia 6.459432 6.321928 6.228819 5.321928 6.149747 4.906891 6.392317 5.906891 6.442943 5.247928
butterfly insect animalia 5.459432 6.426265 5.426265 5.700440 6.459432 3.807355 6.507795 4.754888 5.357552 5.954196
ladybug insect animalia 3.906891 5.247928 5.285402 5.426265 6.149747 4.523562 5.614710 4.000000 6.614710 5.554589
rose flower plantae 6.375039 6.491853 4.392317 2.807355 6.247928 6.554589 6.022368 5.882643 6.392317 6.087463
lily flower plantae 5.906891 5.247928 4.857981 4.643856 6.357552 4.857981 6.569856 4.906891 6.507795 6.442943
iris flower plantae 5.700440 5.129283 4.392317 5.044394 6.658211 5.614710 6.599913 4.643856 5.169925 6.643856
maple tree tree plantae 6.614710 6.491853 5.491853 3.906891 3.807355 5.087463 5.930737 5.426265 5.459432 6.169925
pinetree tree plantae 6.426265 5.491853 6.459432 1.584963 5.357552 5.523562 5.700440 5.614710 1.000000 6.643856
ginkgo tree plantae 4.459432 6.321928 6.149747 5.523562 6.491853 4.459432 6.554589 6.266787 4.906891 5.700440
После инструктажа набора данных я нарисовал график PCA с помощью автоплота
pca_df<-prcomp(df[,-c(1,2)], scale.=TRUE)
autoplot(pca_df)
autoplot(pca_df, data=df, colour='Kingdom', frame.type='norm')
На этом графике я хочу наложить цвет в соответствии с классом
pca_df<-prcomp(df[,-c(1,2)], scale.=TRUE)
autoplot(pca_df)
autoplot(pca_df, data=df, colour='Class')
Таким образом, я хочу использовать представление эллипса из переменной Королевства и раскраску с переменной класса.
Как я могу объединить различные представления в одном графике PCA?
Дополнительная пробная
версия Я попытался нарисовать график PCA, используя другой пакет (factoextra), но он показал тот же результат.
require (factoextra)
fviz_pca_ind(pca_df,
col.ind=df$Kingdom,
addEllipses = TRUE,
col.ind.sup=df$Class,
repel=TRUE)
Ответ №1:
Вы можете указать frame.colour
для эллипсов и colour
для точек:
autoplot(pca_df, data=df, colour='Class', frame.type='norm', frame.colour = "Kingdom")
Комментарии:
1. Классно! Спасибо вам за быстрый и точный ответ! Могу я задать еще один вопрос? Знаете ли вы, как контролировать прозрачность границ каждой группы Королевства? Пункты, содержащиеся в дублированном, трудно различить..
2. @Ssong вы пробовали добавить
alpha = 0.1
в качестве параметраautoplot
?3. ДА. Но он контролировал прозрачность точек, а не граничной области..
4. О, я понимаю.
frame.alpha=0.1
это правильный метод для окраски границ! Спасибо вам за подсказку!!5. Сэр, у меня есть вопрос. Пока я создавал рисунок, я обнаружил, что в легенде были некоторые несоответствия. Как вы можете видеть, животные и растения-это Царство, а не Класс. Но эти две функции содержались в легенде класса и занимали ненужные цвета. Как я могу устранить их и назначить правильные цвета?