首页 > 解决方案 > ggplot2:基于数据点分布的箱线图颜色渐变

问题描述

我有一个带有两个变量(“thalachh”和“输出”)的数据框。“输出”变量只能采用两个值(0 或 1)之一。我正在尝试创建两个箱线图(基于“输出”的值),其中“填充”是基于“thalachh”数据点分布的梯度。

我尝试过的代码如下所示,但这并没有产生预期的结果:

w <- ggplot(data,aes(x=output, y = thalachh,fill=thalachh))+geom_boxplot()+facet_wrap(~output)+scale_fill_gradient2()
w

从上述代码生成的绘图图像

“fill=thalachh”并没有改变上面代码中生成的图,但是如果将其更改为“fill=output”,那么箱线图将使用基于“输出”的渐变比例填充 - 所以我不确定为什么这对于“fill = thalachh”不起作用。

我正在尝试生成一个类似于下图所示的图。有没有一种简单的方法可以使用 ggplot2 做到这一点?

所需绘图的图像

我使用的数据框如下:

data <- structure(list(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
), 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")

标签: rggplot2

解决方案


推荐阅读