有没有办法在R中绘制data.frame?

时间:2019-05-17 22:59:24

标签: r ggplot2 plot

我有一个302行14列的data.frame。 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

以下内容可用于再现Corrplot。我还没有想过要在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)

上述问题就是我的原始data.frame中的行数(302)-它变得人满为患,并且我没有想要添加行fx的可能可能性-因此,我正在寻找其他选择。

1 个答案:

答案 0 :(得分:2)

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