簡體   English   中英

在 ggplot2 中創建多個疊加密度圖

[英]Creating multiple overlaid density plots in ggplot2

我有一個帶有 6 個變量/列的 data.frame(“數據”)。 其中 1 個變量被命名為“輸出”,並且只能取兩個值之一(0 或 1)。

我想為其余 5 個變量生成密度圖(並排顯示這些圖)。 我希望 5 個圖中的每一個都顯示 2 個重疊的密度圖(一個對應於“0”的輸出,另一個對應於“1”的輸出。

為了嘗試實現這一點,我首先使用 reshape 包中的 Melt() 函數“融化”了數據框。 然后我使用了 subset() 函數來生成 2 個數據幀(一個包含輸出為 0 的行,另一個包含輸出為 1 的行。然后我創建了一個帶有 facet_grid 的 ggplot,如下所示:

melteddata = melt(data,id.vars="output",variable.name="variable")
melteddata0 = subset(melteddata, output==0)    
melteddata1 = subset(melteddata, output==1)
u <- ggplot()+geom_density(data=melteddata0,aes(x=variable),fill="green",alpha=0.5)+geom_density(data=melteddata1,aes(x=variable),fill="red",alpha=0.5)+facet_grid(~variable)
u

“u”的圖(從上面的代碼生成)

“facet_grid”按預期創建了單獨的圖,但每個單獨的圖都包含所有變量。 有什么建議可以解決這個問題嗎? 或者我如何以簡單/快速的方式制作這個圖形? 作為參考,我希望個人“年齡”圖如下所示:

在此處輸入圖片說明

使用的data.frame如下所示:

data <- structure(list(age = structure(c(63L, 37L, 41L, 56L, 57L, 57L, 
56L, 44L, 52L, 57L, 54L, 48L, 49L, 64L, 58L, 50L, 58L, 66L, 43L, 
69L, 59L, 44L, 42L, 61L, 40L, 71L, 59L, 51L, 65L, 53L, 41L, 65L, 
44L, 54L, 51L, 46L, 54L, 54L, 65L, 65L, 51L, 48L, 45L, 53L, 39L, 
52L, 44L, 47L, 53L, 53L, 51L, 66L, 62L, 44L, 63L, 52L, 48L, 45L, 
34L, 57L, 71L, 54L, 52L, 41L, 58L, 35L, 51L, 45L, 44L, 62L, 54L, 
51L, 29L, 51L, 43L, 55L, 51L, 59L, 52L, 58L, 41L, 45L, 60L, 52L, 
42L, 67L, 68L, 46L, 54L, 58L, 48L, 57L, 52L, 54L, 45L, 53L, 62L, 
52L, 43L, 53L, 42L, 59L, 63L, 42L, 50L, 68L, 69L, 45L, 50L, 50L, 
64L, 57L, 64L, 43L, 55L, 37L, 41L, 56L, 46L, 46L, 64L, 59L, 41L, 
54L, 39L, 34L, 47L, 67L, 52L, 74L, 54L, 49L, 42L, 41L, 41L, 49L, 
60L, 62L, 57L, 64L, 51L, 43L, 42L, 67L, 76L, 70L, 44L, 60L, 44L, 
42L, 66L, 71L, 64L, 66L, 39L, 58L, 47L, 35L, 58L, 56L, 56L, 55L, 
41L, 38L, 38L, 67L, 67L, 62L, 63L, 53L, 56L, 48L, 58L, 58L, 60L, 
40L, 60L, 64L, 43L, 57L, 55L, 65L, 61L, 58L, 50L, 44L, 60L, 54L, 
50L, 41L, 51L, 58L, 54L, 60L, 60L, 59L, 46L, 67L, 62L, 65L, 44L, 
60L, 58L, 68L, 62L, 52L, 59L, 60L, 49L, 59L, 57L, 61L, 39L, 61L, 
56L, 43L, 62L, 63L, 65L, 48L, 63L, 55L, 65L, 56L, 54L, 70L, 62L, 
35L, 59L, 64L, 47L, 57L, 55L, 64L, 70L, 51L, 58L, 60L, 77L, 35L, 
70L, 59L, 64L, 57L, 56L, 48L, 56L, 66L, 54L, 69L, 51L, 43L, 62L, 
67L, 59L, 45L, 58L, 50L, 62L, 38L, 66L, 52L, 53L, 63L, 54L, 66L, 
55L, 49L, 54L, 56L, 46L, 61L, 67L, 58L, 47L, 52L, 58L, 57L, 58L, 
61L, 42L, 52L, 59L, 40L, 61L, 46L, 59L, 57L, 57L, 55L, 61L, 58L, 
58L, 67L, 44L, 63L, 63L, 59L, 57L, 45L, 68L, 57L, 57L), age = "Age of patient"), 
    trtbps = c(145L, 130L, 130L, 120L, 120L, 140L, 140L, 120L, 
    172L, 150L, 140L, 130L, 130L, 110L, 150L, 120L, 120L, 150L, 
    150L, 140L, 135L, 130L, 140L, 150L, 140L, 160L, 150L, 110L, 
    140L, 130L, 105L, 120L, 130L, 125L, 125L, 142L, 135L, 150L, 
    155L, 160L, 140L, 130L, 104L, 130L, 140L, 120L, 140L, 138L, 
    128L, 138L, 130L, 120L, 130L, 108L, 135L, 134L, 122L, 115L, 
    118L, 128L, 110L, 108L, 118L, 135L, 140L, 138L, 100L, 130L, 
    120L, 124L, 120L, 94L, 130L, 140L, 122L, 135L, 125L, 140L, 
    128L, 105L, 112L, 128L, 102L, 152L, 102L, 115L, 118L, 101L, 
    110L, 100L, 124L, 132L, 138L, 132L, 112L, 142L, 140L, 108L, 
    130L, 130L, 148L, 178L, 140L, 120L, 129L, 120L, 160L, 138L, 
    120L, 110L, 180L, 150L, 140L, 110L, 130L, 120L, 130L, 120L, 
    105L, 138L, 130L, 138L, 112L, 108L, 94L, 118L, 112L, 152L, 
    136L, 120L, 160L, 134L, 120L, 110L, 126L, 130L, 120L, 128L, 
    110L, 128L, 120L, 115L, 120L, 106L, 140L, 156L, 118L, 150L, 
    120L, 130L, 160L, 112L, 170L, 146L, 138L, 130L, 130L, 122L, 
    125L, 130L, 120L, 132L, 120L, 138L, 138L, 160L, 120L, 140L, 
    130L, 140L, 130L, 110L, 120L, 132L, 130L, 110L, 117L, 140L, 
    120L, 150L, 132L, 150L, 130L, 112L, 150L, 112L, 130L, 124L, 
    140L, 110L, 130L, 128L, 120L, 145L, 140L, 170L, 150L, 125L, 
    120L, 110L, 110L, 125L, 150L, 180L, 160L, 128L, 110L, 150L, 
    120L, 140L, 128L, 120L, 118L, 145L, 125L, 132L, 130L, 130L, 
    135L, 130L, 150L, 140L, 138L, 200L, 110L, 145L, 120L, 120L, 
    170L, 125L, 108L, 165L, 160L, 120L, 130L, 140L, 125L, 140L, 
    125L, 126L, 160L, 174L, 145L, 152L, 132L, 124L, 134L, 160L, 
    192L, 140L, 140L, 132L, 138L, 100L, 160L, 142L, 128L, 144L, 
    150L, 120L, 178L, 112L, 123L, 108L, 110L, 112L, 180L, 118L, 
    122L, 130L, 120L, 134L, 120L, 100L, 110L, 125L, 146L, 124L, 
    136L, 138L, 136L, 128L, 126L, 152L, 140L, 140L, 134L, 154L, 
    110L, 128L, 148L, 114L, 170L, 152L, 120L, 140L, 124L, 164L, 
    140L, 110L, 144L, 130L, 130L), chol = c(233L, 250L, 204L, 
    236L, 354L, 192L, 294L, 263L, 199L, 168L, 239L, 275L, 266L, 
    211L, 283L, 219L, 340L, 226L, 247L, 239L, 234L, 233L, 226L, 
    243L, 199L, 302L, 212L, 175L, 417L, 197L, 198L, 177L, 219L, 
    273L, 213L, 177L, 304L, 232L, 269L, 360L, 308L, 245L, 208L, 
    264L, 321L, 325L, 235L, 257L, 216L, 234L, 256L, 302L, 231L, 
    141L, 252L, 201L, 222L, 260L, 182L, 303L, 265L, 309L, 186L, 
    203L, 211L, 183L, 222L, 234L, 220L, 209L, 258L, 227L, 204L, 
    261L, 213L, 250L, 245L, 221L, 205L, 240L, 250L, 308L, 318L, 
    298L, 265L, 564L, 277L, 197L, 214L, 248L, 255L, 207L, 223L, 
    288L, 160L, 226L, 394L, 233L, 315L, 246L, 244L, 270L, 195L, 
    240L, 196L, 211L, 234L, 236L, 244L, 254L, 325L, 126L, 313L, 
    211L, 262L, 215L, 214L, 193L, 204L, 243L, 303L, 271L, 268L, 
    267L, 199L, 210L, 204L, 277L, 196L, 269L, 201L, 271L, 295L, 
    235L, 306L, 269L, 178L, 208L, 201L, 263L, 295L, 303L, 209L, 
    223L, 197L, 245L, 242L, 240L, 226L, 180L, 228L, 149L, 227L, 
    278L, 220L, 197L, 253L, 192L, 220L, 221L, 240L, 342L, 157L, 
    175L, 175L, 286L, 229L, 268L, 254L, 203L, 256L, 229L, 284L, 
    224L, 206L, 167L, 230L, 335L, 177L, 276L, 353L, 225L, 330L, 
    230L, 243L, 290L, 253L, 266L, 233L, 172L, 305L, 216L, 188L, 
    282L, 185L, 326L, 231L, 254L, 267L, 248L, 197L, 258L, 270L, 
    274L, 164L, 255L, 239L, 258L, 188L, 177L, 229L, 260L, 219L, 
    307L, 249L, 341L, 263L, 330L, 254L, 256L, 407L, 217L, 282L, 
    288L, 239L, 174L, 281L, 198L, 288L, 309L, 243L, 289L, 289L, 
    246L, 322L, 299L, 300L, 293L, 304L, 282L, 269L, 249L, 212L, 
    274L, 184L, 274L, 409L, 246L, 283L, 254L, 298L, 247L, 294L, 
    299L, 273L, 309L, 259L, 200L, 244L, 231L, 228L, 230L, 282L, 
    269L, 206L, 212L, 327L, 149L, 286L, 283L, 249L, 234L, 237L, 
    234L, 275L, 212L, 218L, 261L, 319L, 166L, 315L, 204L, 218L, 
    223L, 207L, 311L, 204L, 232L, 335L, 205L, 203L, 318L, 225L, 
    212L, 169L, 187L, 197L, 176L, 241L, 264L, 193L, 131L, 236L
    ), thalachh = c(150L, 187L, 172L, 178L, 163L, 148L, 153L, 
    173L, 162L, 174L, 160L, 139L, 171L, 144L, 162L, 158L, 172L, 
    114L, 171L, 151L, 161L, 179L, 178L, 137L, 178L, 162L, 157L, 
    123L, 157L, 152L, 168L, 140L, 188L, 152L, 125L, 160L, 170L, 
    165L, 148L, 151L, 142L, 180L, 148L, 143L, 182L, 172L, 180L, 
    156L, 115L, 160L, 149L, 151L, 146L, 175L, 172L, 158L, 186L, 
    185L, 174L, 159L, 130L, 156L, 190L, 132L, 165L, 182L, 143L, 
    175L, 170L, 163L, 147L, 154L, 202L, 186L, 165L, 161L, 166L, 
    164L, 184L, 154L, 179L, 170L, 160L, 178L, 122L, 160L, 151L, 
    156L, 158L, 122L, 175L, 168L, 169L, 159L, 138L, 111L, 157L, 
    147L, 162L, 173L, 178L, 145L, 179L, 194L, 163L, 115L, 131L, 
    152L, 162L, 159L, 154L, 173L, 133L, 161L, 155L, 170L, 168L, 
    162L, 172L, 152L, 122L, 182L, 172L, 167L, 179L, 192L, 143L, 
    172L, 169L, 121L, 163L, 162L, 162L, 153L, 163L, 163L, 96L, 
    140L, 126L, 105L, 157L, 181L, 173L, 142L, 116L, 143L, 149L, 
    171L, 169L, 150L, 138L, 125L, 155L, 152L, 152L, 131L, 179L, 
    174L, 144L, 163L, 169L, 166L, 182L, 173L, 173L, 108L, 129L, 
    160L, 147L, 155L, 142L, 168L, 160L, 173L, 132L, 114L, 160L, 
    158L, 120L, 112L, 132L, 114L, 169L, 165L, 128L, 153L, 144L, 
    109L, 163L, 158L, 142L, 131L, 113L, 142L, 155L, 140L, 147L, 
    163L, 99L, 158L, 177L, 141L, 111L, 150L, 145L, 161L, 142L, 
    157L, 139L, 162L, 150L, 140L, 140L, 146L, 144L, 136L, 97L, 
    132L, 127L, 150L, 154L, 111L, 174L, 133L, 126L, 125L, 103L, 
    130L, 159L, 131L, 152L, 124L, 145L, 96L, 109L, 173L, 171L, 
    170L, 162L, 156L, 112L, 143L, 132L, 88L, 105L, 166L, 150L, 
    120L, 195L, 146L, 122L, 143L, 106L, 125L, 125L, 147L, 130L, 
    126L, 154L, 182L, 165L, 160L, 95L, 169L, 108L, 132L, 117L, 
    126L, 116L, 103L, 144L, 145L, 71L, 156L, 118L, 168L, 105L, 
    141L, 152L, 125L, 125L, 156L, 134L, 181L, 138L, 120L, 162L, 
    164L, 143L, 130L, 161L, 140L, 146L, 150L, 144L, 144L, 136L, 
    90L, 123L, 132L, 141L, 115L, 174L), oldpeak = c(2.3, 3.5, 
    1.4, 0.8, 0.6, 0.4, 1.3, 0, 0.5, 1.6, 1.2, 0.2, 0.6, 1.8, 
    1, 1.6, 0, 2.6, 1.5, 1.8, 0.5, 0.4, 0, 1, 1.4, 0.4, 1.6, 
    0.6, 0.8, 1.2, 0, 0.4, 0, 0.5, 1.4, 1.4, 0, 1.6, 0.8, 0.8, 
    1.5, 0.2, 3, 0.4, 0, 0.2, 0, 0, 0, 0, 0.5, 0.4, 1.8, 0.6, 
    0, 0.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.4, 1.2, 0.6, 0, 0, 0.4, 
    0, 0, 0, 0.2, 1.4, 2.4, 0, 0, 0.6, 0, 0, 0, 1.2, 0.6, 1.6, 
    1, 0, 1.6, 1, 0, 0, 0, 0, 0, 0, 1.2, 0.1, 1.9, 0, 0.8, 4.2, 
    0, 0.8, 0, 1.5, 0.1, 0.2, 1.1, 0, 0, 0.2, 0.2, 0, 0, 0, 2, 
    1.9, 0, 0, 2, 0, 0, 0, 0, 0.7, 0.1, 0, 0.1, 0.2, 0, 0, 0, 
    0, 0, 0, 0, 0, 1.5, 0.2, 0.6, 1.2, 0, 0.3, 1.1, 0, 0.3, 0.9, 
    0, 0, 2.3, 1.6, 0.6, 0, 0, 0.6, 0, 0, 0.4, 0, 0, 1.2, 0, 
    0, 0, 1.5, 2.6, 3.6, 1.4, 3.1, 0.6, 1, 1.8, 3.2, 2.4, 2, 
    1.4, 0, 2.5, 0.6, 1.2, 1, 0, 2.5, 2.6, 0, 1.4, 2.2, 0.6, 
    0, 1.2, 2.2, 1.4, 2.8, 3, 3.4, 3.6, 0.2, 1.8, 0.6, 0, 2.8, 
    0.8, 1.6, 6.2, 0, 1.2, 2.6, 2, 0, 0.4, 3.6, 1.2, 1, 1.2, 
    3, 1.2, 1.8, 2.8, 0, 4, 5.6, 1.4, 4, 2.8, 2.6, 1.4, 1.6, 
    0.2, 1.8, 0, 1, 0.8, 2.2, 2.4, 1.6, 0, 1.2, 0, 0, 2.9, 0, 
    2, 1.2, 2.1, 0.5, 1.9, 0, 0, 2, 4.2, 0.1, 1.9, 0.9, 0, 0, 
    3, 0.9, 1.4, 3.8, 1, 0, 2, 1.8, 0, 0.1, 3.4, 0.8, 3.2, 1.6, 
    0.8, 2.6, 1, 0.1, 1, 1, 2, 0.3, 0, 3.6, 1.8, 1, 2.2, 0, 1.9, 
    1.8, 0.8, 0, 3, 2, 0, 4.4, 2.8, 0.8, 2.8, 4, 0, 1, 0.2, 1.2, 
    3.4, 1.2, 0), output = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
-303L), class = "data.frame")

無需對數據框進行子集化。 只需在fill上映射outputfactor(output)並通過scale_fill_manual設置顏色。 然而,主要問題是您將variable映射到x而不是值。 此外,由於您的變量具有不同的比例,我建議在facet_grid內使用scales=free或者因為您只有一個“維度” facet_wrap

library(ggplot2)

melteddata = reshape::melt(data,id.vars="output",variable.name="variable")

ggplot(melteddata)+
  geom_density(data=melteddata,aes(x=value, fill = factor(output)), alpha=0.5)+
  scale_fill_manual(values = c("0" = "green", "1" = "red")) +
  facet_wrap(~variable, scales = "free", nrow = 1)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM