Сюжет, напечатанный в ggbiplot, оказывается слишком загроможденным именами переменных - PullRequest
0 голосов
/ 15 октября 2018

Я использую функцию ggbiplot для построения графика двух основных компонентов.https://github.com/vqv/ggbiplot/blob/master/R/ggbiplot.r#L171

Я добавил изображение моего фактического графика.Как вы можете видеть здесь, ggbiplot of PC имена переменных выглядят очень загроможденными.Для решения этой проблемы я изначально использовал ggrepel, который только частично решает проблемы.ggrepel ловко работает в ggbiplot, чтобы отталкивать имена переменных друг от друга.Так что теперь имена переменных разборчивы, но все еще очень трудно читать.

Есть ли способ сделать этот график более читабельным?Есть ли способ аккуратно показать имена переменных в виде легенд в правой части графика?Должен ли я просто соотнести исходную переменную простыми терминами, такими как «a», «b», «c» и т. Д. И объяснить это в легендах с их настоящими именами?Как мне это сделать?Существуют ли другие более простые / элегантные решения?

Ниже приведен пример данных и кода, которые я использую.Кроме того, одно отличие между примерами данных и моими данными состоит в том, что «группы» в моих данных являются категориальными.

set.seed(1)
dat <- data.frame(
  Diet = sample(1:2),
  Outcome1 = sample(1:10),
  Outcome2 = sample(11:20),
  Outcome3 = sample(21:30),
  Response1 = sample(31:40),
  Response2 = sample(41:50),
  Response3 = sample(51:60)
)

ir.pca <- prcomp(dat[,3:5], center = TRUE, scale. = TRUE) 

summary(ir.pca)

loadings <- ir.pca$rotation

scores <- ir.pca$x

correlations <- t(loadings)*ir.pca$sdev

dat2 <- as.data.frame(dat)
ggbiplot(ir.pca, choices=c(1,2), # creates a plot with ellipse
         groups=dat2[,1],
         obs.scale = 1, 
         var.scale = 1, 
         ellipse = TRUE)

РЕДАКТИРОВАТЬ

Исходный набор данных

structure(list(X = 1:10, subject = structure(c(1L, 2L, 3L, 4L, 
5L, 11L, 12L, 14L, 18L, 19L), .Label = c("100", "102", "105", 
"108", "109", "113", "114", "116", "117", "119", "121", "123", 
"128", "131", "136", "138", "139", "141", "144", "146", "149", 
"151", "152", "153", "154", "155", "157", "160", "170", "171", 
"173", "174", "176", "178", "179", "180", "181", "183"), class = "factor"), 
    diet = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
    ), .Label = c("Ancestral", "USDA"), class = "factor"), veg = c(1.702913333, 
    1.878265667, 3.240286333, 6.186628, 2.460914333, 2.129945333, 
    3.715283667, 2.502908333, 2.370914333, 3.978840667), fruit = c(3.303805667, 
    2.906236667, 0.774577333, 1.452929333, 1.749540333, 0.669345, 
    2.192563, 2.824062667, 1.423301333, 0.942424333), meat = c(5.788873333, 
    5.001508333, 6.159671, 6.437514333, 3.539373667, 4.876655333, 
    10.33338333, 7.553404, 6.431676667, 4.846782667), grains = c(0.490417667, 
    2.626051, 0, 1.990165, 0.933450667, 0.0132, 0, 1.864535, 
    2.460821667, 1.553922333), egg = c(2.598418, 1.134210667, 
    1.000066667, 0.293333333, 1.258387667, 0.873066667, 0.710173333, 
    1.50172, 0.336560667, 0.386666667), nutsandseeds = c(2.134137333, 
    2.657383, 0.666666667, 3.805841, 2.891846, 1.1288, 8.638817, 
    0, 8.836688333, 1.208168667), legumes = c(0, 0, 0, 0.049405, 
    0, 0, 0, 0, 0, 0.0216), dairy = c(1.473881667, 0.958579333, 
    0, 0.781515, 0.618272, 1.0004, 0, 0.774681, 0.093069333, 
    2.296922), oil = c(20.14615467, 33.00514467, 6.53916, 39.29075867, 
    18.61577133, 15.46193, 63.83851033, 28.77015667, 55.96778833, 
    36.518752), solidfat = c(39.46406233, 24.855274, 4.287493333, 
    19.60025, 9.680668, 8.848316667, 8.328955, 30.518353, 41.01203167, 
    45.50694533), sugar = c(8.338315, 3.991491, 5e-05, 2.432482667, 
    0.221278333, 0.338247667, 4.647888, 2.99909, 6.016041667, 
    7.562984667)), row.names = c(NA, 10L), class = "data.frame")
...