Обернуть метки оси в корреляционной матрице

Я пытаюсь использовать ggcorr() функционировать вlibrary(GGally) создать корреляционную матрицу. Пакет работает как положено, но я столкнулся с проблемой, в которой я хотел бы изменить способ отображения меток осей на графике.

В настоящее время они автоматически добавят _ или. разделять имена с пробелами или другими символами между ними. В идеале я хотел бы создать разрыв строки (\n) между пробелами в именах, чтобы длинные имена и короткие имена легко читались и не выходили за рамки соответствующего столбца и строки.

Я нашел решения, которые другие использовали на SO, включая использование str_wrap(), но это было в пределах ggplot() звоните, а не этот конкретный пакет. Я проверил код R для пакета, но не смог найти, где конкретно отредактировать эти ярлыки. Всякий раз, когда я пытаюсь редактировать текст по оси X или Y, он добавляет совершенно новую ось и набор меток.

Я сейчас dcast() кадр данных в результирующий кадр данных и даже когда я gsub() "\n" в столбце имен игроков, они теряются в dcast() переход.

Вот пример того, с чем я работаю. Я хотел бы иметь возможность автоматически создавать разрывы строк между именем и фамилией меток.

library(GGally)
library(ggplot2)

test <- structure(list(Date = structure(c(17100, 17102, 17103, 17106, 
17107), class = "Date"), `Alexis Ajinca` = c(1.2, NA, 9.2, 6.4, 
NA), `Anthony Davis` = c(95.7, 76.9, 29, 67, 24.9), `Buddy Hield` = c(9.7, 
4.7, 17, 8, 28.3), `Cheick Diallo` = c(NA, NA, 3.2, NA, NA), 
    `Dante Cunningham` = c(0.5, 27.6, 14, 13.5, -1), `E'Twaun Moore` = c(19.2, 
    16.1, 22, 20.5, 10.1), `Lance Stephenson` = c(16.1, 31.6, 
    8, 8.1, 34.8), `Langston Galloway` = c(10.9, 2, 13.8, 2.2, 
    29.4), `Omer Asik` = c(4.7, 6.6, 9.9, 15.9, 14.2), `Solomon Hill` = c(4.7, 
    13.2, 12.8, 35.2, 4.4), `Terrence Jones` = c(17.1, 12.4, 
    9.8, NA, 20.8), `Tim Frazier` = c(40.5, 40.2, 18.3, 44.1, 
    7.2)), .Names = c("Date", "Alexis Ajinca", "Anthony Davis", 
"Buddy Hield", "Cheick Diallo", "Dante Cunningham", "E'Twaun Moore", 
"Lance Stephenson", "Langston Galloway", "Omer Asik", "Solomon Hill", 
"Terrence Jones", "Tim Frazier"), row.names = c(NA, -5L), class = "data.frame")

ggc <- ggcorr(test[,-1], method = c("pairwise","pearson"), 
       hjust = .85, size = 3,
       layout.exp=2)
ggc

https://i.gyazo.com/fbbd792e1545126c01600225f03047f9.png

Спасибо за любую помощь и, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы или вам нужны разъяснения!

1 ответ

Решение

Пара подходов

Вы можете редактировать объект, возвращенный ggcorr

g = ggplot_build(ggc)
g$data[[2]]$label = gsub("_", "\n", g$data[[2]]$label )
grid::grid.draw(ggplot_gtable(g))

Или вы можете создать новый фрейм данных и добавить метки вручную, используя geom_text, Это, вероятно, дает немного больше контроля над выравниванием текста и размещением.

# I dont see how to suppress the labels so just set the size to zero
ggc <- ggcorr(test[,-1], method = c("pairwise","pearson"), 
       hjust = .85, 
       size = 0, # set this to zero
       layout.exp=2)

# Create labels and plot
dat <- data.frame(x = seq(test[-1]), y = seq(test[-1]), 
                  lbs = gsub(" ", "\n", names(test[-1]) ))
ggc + geom_text(data=dat, aes(x, y, label=lbs), nudge_x = 2, hjust=1)
Другие вопросы по тегам