如何为连续数据指定 ggplot2 boxplot 填充颜色?

And*_*owe 1 r colors ggplot2

我想使用 data.frame 的所有列绘制一个 ggplot2 boxplot,并且我想按每列的中位数对列重新排序,旋转 x 轴标签,并用对应于相同中位数的颜色填充每个框。我不知道如何做最后一部分。填充颜​​色对应一个因子变量的例子有很多,但我还没有看到使用连续变量的明确例子控制填充颜色的变量。(我尝试这样做的原因是结果图将为带有节点的力导向网络图提供上下文,这些节点将以与箱线图相同的方式进行颜色编码——然后颜色将提供之间的映射两个图。)如果我可以为以后的图重新使用值到颜色的映射,以便图之间的颜色保持一致,那就太好了。因此,例如,与具有高中值的列变量对应的框将具有表示此映射的颜色,并且与其他图中相同列变量的颜色完美匹配(例如力导向网络中的相应节点图形)。

到目前为止,我有这样的事情:

# Melt the data.frame:
DT.m <- melt(results, id.vars = NULL) # using reshape2
# I can now make a boxplot for every column in the data.frame:
g <- ggplot(DT.m, aes(x = reorder(variable, value, FUN=median), y = value)) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
stat_summary(fun.y=mean, colour="darkred", geom="point") +
geom_boxplot(???, alpha=0.5)
Run Code Online (Sandbox Code Playgroud)

颜色填充信息是我所坚持的。“值”是 [0,1] 范围内的连续变量,我的 data.frame 中有 55 列。我尝试过的各种方法似乎导致盒子在中间垂直分开,我没有进一步。有任何想法吗?

eip*_*i10 7

您可以通过将中值按组添加到数据框中,然后将新的中值变量映射到填充美学来实现。这是一个带有内置mtcars数据框的示例。通过在不同的图中使用相同的映射,你应该得到相同的颜色:

library(ggplot2)
library(dplyr)

ggplot(mtcars %>% group_by(carb) %>%
         mutate(medMPG = median(mpg)), 
       aes(x = reorder(carb, mpg, FUN=median), y = mpg)) +
  geom_boxplot(aes(fill=medMPG)) +
  stat_summary(fun.y=mean, colour="darkred", geom="point") +
  scale_fill_gradient(low=hcl(15,100,75), high=hcl(195,100,75))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您有具有不同中位数范围的各种数据框,您仍然可以使用上述方法,但要在所有图中获得一致的颜色到中位数的映射,您还需要在每个图中设置相同的limitsscale_fill_gradient。在此示例中,mpg(按carb分组)的中位数从 15.0 到 22.8 不等。但是假设在我所有的数据集中,它从 13.3 到 39.8 不等。然后我可以将它添加到我的所有情节中:

scale_fill_gradient(limits=c(13.3, 39.8), 
                    low=hcl(15,100,75), high=hcl(195,100,75))
Run Code Online (Sandbox Code Playgroud)

这只是为了说明。如果您的数据可能发生更改,为了便于维护,您需要以编程方式设置实际限制。