Есть ли способ построить data.frame в R? - PullRequest
0 голосов
/ 18 мая 2019

У меня есть data.frame с 302 строками и 14 столбцами. Содержимое data.frame - это коэффициенты из 14 предыдущих регрессионных анализов, и я ищу способ построить весь data.frame так, чтобы коэффициенты были выделены оттенками красного и синего (отрицательные и положительные числа соответственно, 0 должны быть белым).

Имена строк и столбцов не должны отображаться на графике, а также фактические коэффициенты, но мне бы хотелось иметь возможность добавлять более толстые линии в определенные столбцы и строки. Элемент data.frame настроен так, что строки и столбцы сгруппированы теоретически, поэтому добавление строк вокруг этих группировок поможет подчеркнуть это.

Я уже пробовал с corrplot и ggplot. corrplot (df, is.corr = FALSE) дал мне кое-что, связанное с тем, что я хочу, но сюжет был длинным (из-за 302 строк). Если возможно, они (строки) должны автоматически регулировать свою высоту так, чтобы весь график был виден. Моя главная цель - прежде всего визуально изучить возможные образцы цветов.

Ниже приведен фрагмент моих данных.

                          ingen0 kommune3 kommune8 kommune9 diagnose1 diagnose2 diagnose7 diagnose12 diagose13  psyk5  psyk9 psyk10  krim4  krim6
abdominalomfang            0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.002
adoption1                  0.000    0.000    0.274    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.000
adoptions_anbr1            0.000    0.965    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.585
afsonforfods_mor1          0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000 -0.017
afsonforfodsfarr1          0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.183
agteskab_laengde_far       0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000    -0.001  0.000  0.000  0.000  0.000 -0.008
agteskab_laengde_mor       0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000 -0.002
akutkejsfoed1              0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000 -0.127  0.000  0.000  0.000  0.000
alder_far                 -0.003    0.000    0.009    0.000     0.001     0.000     0.000      0.000     0.000  0.000  0.000  0.002  0.000 -0.001
alder_mor                  0.000    0.000    0.004    0.000     0.000    -0.025     0.000      0.000     0.000  0.004  0.000  0.000 -0.007 -0.012
alm_lage_sysi_far         -0.008    0.000    0.005    0.000     0.001     0.004     0.002      0.006     0.000  0.000  0.467  0.003  0.000  0.003
alm_lage_sysi_mor         -0.007    0.000    0.009    0.003     0.000     0.006     0.003      0.006    -0.002  0.006  0.003  0.005  0.000  0.002
anbringelse1              -2.009    0.005   -1.696   -0.092     0.260     0.217     0.000      0.000     0.000  0.213 -0.092 -0.175 -0.392  0.169
anholdtforfods_far1        0.000    0.000    0.000    0.000     0.000     0.107     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.131
anholdtforfods_mor1        0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000 -0.214
antaldiag_far             -0.006    0.000    0.019    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.051
antaldiag_mor              0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.000
antdage_t_far              0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.000
antdage_t_mor              0.000    0.000    0.000    0.000     0.000     0.000     0.000      0.000     0.000  0.000  0.000  0.000  0.000  0.001
apgarscore_efter5minutter  0.047   -0.091   -0.044    0.000     0.000    -0.027     0.000     -0.010     0.009  0.000  0.000  0.000  0.000  0.005

Следующее может быть использовано для воспроизведения corpplot. Мне не удалось создать что-либо успешное в ggplot.

A <- structure(list(ingen0 = c(0, 0, 0, 0, 0, 0, 0, 0, -0.003, 0, 
-0.008, -0.007, -2.009, 0, 0, -0.006, 0, 0, 0, 0.047), kommune3 = c(0, 
0, 0.965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 
-0.091), kommune8 = c(0, 0.274, 0, 0, 0, 0, 0, 0, 0.009, 0.004, 
0.005, 0.009, -1.696, 0, 0, 0.019, 0, 0, 0, -0.044), kommune9 = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.003, -0.092, 0, 0, 0, 0, 0, 0, 
0), diagnose1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0, 0.001, 0, 
0.26, 0, 0, 0, 0, 0, 0, 0), diagnose2 = c(0, 0, 0, 0, 0, 0, 0, 
0, 0, -0.025, 0.004, 0.006, 0.217, 0.107, 0, 0, 0, 0, 0, -0.027
), diagnose7 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.003, 
0, 0, 0, 0, 0, 0, 0, 0), diagnose12 = c(0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0.006, 0.006, 0, 0, 0, 0, 0, 0, 0, -0.01), diagose13 = c(0, 
0, 0, 0, 0, -0.001, 0, 0, 0, 0, 0, -0.002, 0, 0, 0, 0, 0, 0, 
0, 0.009), psyk5 = c(0, 0, 0, 0, 0, 0, 0, -0.127, 0, 0.004, 0, 
0.006, 0.213, 0, 0, 0, 0, 0, 0, 0), psyk9 = c(0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0.467, 0.003, -0.092, 0, 0, 0, 0, 0, 0, 0), psyk10 = c(0, 
0, 0, 0, 0, 0, 0, 0, 0.002, 0, 0.003, 0.005, -0.175, 0, 0, 0, 
0, 0, 0, 0), krim4 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, -0.007, 0, 
0, -0.392, 0, 0, 0, 0, 0, 0, 0), krim6 = c(0.002, 0, 0.585, -0.017, 
0.183, -0.008, -0.002, 0, -0.001, -0.012, 0.003, 0.002, 0.169, 
0.131, -0.214, 0.051, 0, 0, 0.001, 0.005)), row.names = c("abdominalomfang", 
"adoption1", "adoptions_anbr1", "afsonforfods_mor1", "afsonforfodsfarr1", 
"agteskab_laengde_far", "agteskab_laengde_mor", "akutkejsfoed1", 
"alder_far", "alder_mor", "alm_lage_sysi_far", "alm_lage_sysi_mor", 
"anbringelse1", "anholdtforfods_far1", "anholdtforfods_mor1", 
"antaldiag_far", "antaldiag_mor", "antdage_t_far", "antdage_t_mor", 
"apgarscore_efter5minutter"), class = "data.frame")

library(corrplot)
corrplot(A, is.corr = FALSE)

Проблема с вышеупомянутым заключается в том, что упоминалось количество строк (302) в моем исходном файле data.frame - он переполнен, и у меня нет желаемых возможностей добавить строки fx - поэтому я ищу другие варианты.

1 Ответ

2 голосов
/ 18 мая 2019

302 категорий много для отображения, особенно если вы хотите увидеть категории. (Обычно нам требуется ~ 10 страниц, чтобы показать столько строк текста.)

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

Сначала некоторые поддельные данные:

library(tidyverse)
df <- data.frame(
  category = rep(colors(), each = 14),
  col = letters[1:14],
  cor = rnorm(9198)
)

Затем построение графика в виде сетки листов ggplot:

ggplot(df, aes(col, category, fill = cor)) + 
  geom_tile() +
  scale_fill_gradient2(low = "red", mid = "white", high = "blue")

plotly::ggplotly(.Last.value)

Категории на левой стороне сильно перегружены и выглядят мусором (возможно, стоит добавить theme(axis.text.y = element_blank())), но вы все равно можете исследовать в интерактивном режиме с помощью сюжета.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...