Перекрывающиеся переменные ggbiplot

Я не могу добиться, чтобы метки переменных не пересекались с ggbiplot

(с использованием RStudio 1.1.463 и R версии 3.5.3)

Я запускаю PCA с prcomp, но я получаю перекрывающиеся метки переменной:

https://i.stack.imgur.com/EBuBx.jpg

Вот пример:

library(ggbiplot)
data(wine)
wine_subset<-subset(wine[,c(6:7,9,12)])
wine.pca <- prcomp(wine_subset, scale. = TRUE)
print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, ellipse = TRUE, circle = TRUE))

Я попытался решить, добавив этот код из пакета ggrepel:

library(ggrepel)
+geom_text_repel(aes(labels=colnames(wine_subset)))

но он возвращает следующую ошибку:

Предупреждение. Игнорирование неизвестных эстетических элементов: метки Ошибка: эстетические элементы должны быть либо длиной 1, либо такими же, как данные (178): метки.

Мне кажется, что он пытается взять метки строк, но они мне не нужны в сюжете. Мне нужны только метки переменных.


person Facu    schedule 17.05.2019    source источник
comment
Здесь есть несколько проблем: geom_text_repel() предназначен для устранения перекрывающихся меток, которых я здесь не вижу. Также я не понимаю, как эта функция будет работать со специализированным графиком, таким как ggbiplot(), поскольку у вас нет доступа к координатам x и y, которые вам нужно указать в geom_text_repel(). Наконец, вы не можете установить отображение ggplot2 в вектор; это должен быть столбец вашего набора данных. Если вас беспокоит, что метки перекрывают точки, вы можете рассмотреть возможность установки альфа-канала, чтобы сделать точки более прозрачными.   -  person jtr13    schedule 17.05.2019
comment
Спасибо за ответ. Проблема перекрытия связана с метками переменных. Мне не нужны метки строк на графике.   -  person Facu    schedule 17.05.2019
comment
Извините, теперь я вижу проблему. Это хак, но он работает: colnames(wine_subset)[2] <- "\nFlav"   -  person jtr13    schedule 17.05.2019
comment
Спасибо! не могли бы вы вставить полный код? Я не понимаю, как использовать ваше предложение   -  person Facu    schedule 17.05.2019
comment
Конечно, см. ниже.   -  person jtr13    schedule 17.05.2019


Ответы (2)


Это хак, который добавляет разрыв строки к одному из имен переменных, чтобы оно не пересекалось с другим:

library(ggbiplot)
data(wine)
wine_subset<-subset(wine[,c(6:7,9,12)])
colnames(wine_subset)[2] <- "\nFlav"  # new line
wine.pca <- prcomp(wine_subset, scale. = TRUE)
print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, ellipse = TRUE, circle = TRUE))

Просто убедитесь, что для построения графика используется только новое имя столбца.

введите здесь описание изображения

person jtr13    schedule 17.05.2019

Я нашел лучшее решение с пакетом ggfortify:

library(ggbiplot)   #just for using the same example database as before
library(ggfortify)

data(wine)

wine_subset<-subset(wine[,c(6:7,9,12)])

wine.pca <- prcomp(wine_subset, scale. = TRUE)

wine$wine.class <- wine.class    #adding wine classes to wine data frame

autoplot(wine.pca, data=wine, colour="wine.class", loadings = TRUE, loadings.colour = 'brown',
         loadings.label.colour='brown', loadings.label = TRUE, loadings.label.size = 4,
         loadings.label.repel=TRUE)+stat_ellipse(type = "norm", 
         level=0.68,aes(color=wine.class))

Вот захват результата

person Facu    schedule 17.05.2019