Reputation: 23
I have a data.frame ("data") with 6 variables/columns. 1 of these variables is named "output" and can only take one of two values (0 or 1).
I want to generate density plots for the remaining 5 variables (with the plots shown side by side). I want each of the 5 plots to show 2 overlapping density plots (one corresponding to output of "0" and the other corresponding to output of "1".
To try to achieve this I have first "melted" the data frame using the melt() function from the reshape package. I have then used the subset() function to generate 2 dataframes (one containing the rows with output 0 and the other containing the rows with output 1. I have then created a ggplot with facet_grid as shown below:
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
"facet_grid" has created individual plots as expected but each individual plot contains all of the variables. Are there any suggestions has to how I can fix this? Or how I can produce this graphic in an easy/quick way? For reference I am expecting the individual "age" plot to look like this:
The data.frame used is shown below:
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")
Upvotes: 2
Views: 100
Reputation: 124148
There is no need to subset your dataframe. Simply map output
or factor(output)
on fill
and set the colors via scale_fill_manual
. The main issue however is that you mapped variable
on x
instead of value. Additionally as you variables have different scales I would suggest to make use of scales=free
inside facet_grid
or as you have only one "dimension" 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)
Upvotes: 1