Q: ggbiplot _ Стрелки переднего плана; изменить цвет стрелки

У меня большой набор данных, и я пытался построить PCA. Получившимся сюжетом я вполне доволен, но хотел бы кое-что изменить:

стрелки: они кажутся фоновыми и закрыты точками данных. 1) как я могу выделить их? 2) как я могу изменить цвета и размер фонда?

эллипсы: 3) как сделать линии толще?

легенда 4) как правильно поставить в начало сам сюжет?

Заранее спасибо!!

Вот как я получил этот график:

g <- ggbiplot(LS_3.pca, choices = 1:2, scale = 1, pc.biplot =
       TRUE, obs.scale = 1, var.scale = 1, groups =
       LS.loc, ellipse = TRUE, ellipse.prob = 0.98, labels =
       NULL, labels.size = 5, alpha = 0.25, circle
     = FALSE, circle.prob = 0.69, varname.size = 5,
     varname.adjust = 1.5, varname.abbrev = FALSE, var.axes = TRUE)
g <- g + xlim(-8, 6) + ylim(-4, 6)
g <- g + theme_classic()

print(g)

person Martin Jansen    schedule 02.07.2015    source источник


Ответы (2)


ggbiplot возвращает объект класса "ggplot". Если вы изучите этот объект, вы обнаружите, что он содержит список под названием «слои». Слой geom_segment появляется перед слоем geom_point. Вы хотите изменить их порядок. Если слой geom_segment является слоем 2 из 4, вы можете сделать (например):

myplot$layers <- c(myplot$layers, myplot$layers[[2]])

Это добавит дополнительный слой (который рисует стрелки) в конце списка, и этот слой будет нарисован после того, как будут нанесены точки (в предыдущем слое). Этого хака достаточно, чтобы обеспечить требуемую функциональность.

РЕДАКТИРОВАТЬ: я понимаю, что этот ответ касается только вопроса размещения стрелок на переднем плане. Это была проблема, с которой я столкнулся, и поэтому я предоставляю свое решение здесь для использования другими. Чтобы исправить другие проблемы, я предлагаю набрать в консоли:

ggbiplot

без круглых скобок, в котором будет указано тело функции. Вырежьте и вставьте в новый сценарий R, который определяет новую функцию (например, my_ggbiplot) и взломайте, чтобы получить то, что вы хотите. Это не длинная функция, и довольно легко понять, что все делает. Однако для выделения стрелок вышеописанное однострочное исправление будет работать.

person Andrew John Lowe    schedule 07.12.2015

Меня разочаровали ограничения ggbiplot, поэтому я скопировал участки кода из функции, чтобы использовать их в стандартном вызове ggplot.

# Load data
DATA <- data.frame(iris)

# Do PCA
PCA <- prcomp(iris[,1:4])

# Extract PC axes
PCAvalues <- data.frame(Species = iris$Species, PCA$x)

# Extract loadings of the variables
PCAloadings <- data.frame(Variables = rownames(PCA$rotation), PCA$rotation)

# Calculate the angles and the label offset
PCAloadings$Angle = ((180/pi) * atan(PCAloadings$PC2/PCAloadings$PC1))
PCAloadings$Offset <- ((-2 * sign(PCAloadings$PC1))/2)

# Plot
ggplot(PCAvalues, aes(x = PC1, y = PC2, colour = Species)) +
  stat_ellipse(level = 0.95, size = 2, show.legend = FALSE) +
  geom_point(size = 3) +
  geom_segment(data = PCAloadings, aes(x = 0, y = 0, xend = (PC1), yend = (PC2)),
     arrow = arrow(length = unit(1/2, "picas")), color = "black") +
 geom_text(data = PCAloadings, aes(label = Variables, x = (PC1), y = (PC2)), 
    color = "black", size = 4, angle = PCAloadings$Angle, hjust = 
    PCAloadings$Offset) +
      theme_classic() +
      theme(legend.justification = c(1,1), legend.position = c(1,1))

Ответы:

Q1. - как утверждает @Andrew John Lowe в своем ответе, слои создаются в том порядке, в котором вы их вводите, поэтому, если строка geom_segment последняя, ​​она появится сверху.

Q2. - изменить цвет стрелки с аргументом colour в вызове geom_segment. Измените шрифт size меток в вызове geom_text.

Q3. - снова изменить аргумент size в вызове stat_ellipse.

Q4. - вызов theme решит эту проблему, c(1,1) указывает, где на графике должна появиться легенда, 0 слева и 1 справа.

Это не совсем идеально, поскольку вам нужно указать PCAloadings$Offset для меток стрелок вручную, и может потребоваться немного проб и ошибок, чтобы получить желаемое расстояние, или даже потребуется ввести пользовательские числа в фрейм данных для каждой метки. Однако теперь вы можете использовать остальную часть ggplot как обычно.

person EcologyTom    schedule 28.03.2018