如何更改马赛克图的调色板

时间:2015-04-24 01:39:38

标签: r plot colors fill

我有以下数据和代码:

> mat <- matrix(c(120,230,84,70,130,83,13,26,18),3)
> dimnames(mat) <- list(c("good","fair","poor"),c("a","b","c"))
> mat

> mat
       a   b  c
good 120  70 13
fair 230 130 26
poor  84  83 18
> 
> chisq.test(mat)

        Pearson's Chi-squared test

data:  mat
X-squared = 11.411, df = 4, p-value = 0.02231

> library(vcd)
> mosaic(mat, shade=T)

enter image description here

卡方检验显示出显着差异,但由于残差很小,因此没有看到颜色。有了更高的残差,可以看到颜色:

enter image description here

?马赛克显示此信息:

highlighting_fill: color vector or palette function used for a highlighted variable, if any.

如何更改上图的填充色?

2 个答案:

答案 0 :(得分:3)

默认情况下,vcd中的镶嵌图阴影使用截止值2和4作为与每个单元相关的残差的绝对值,如Friendly(1994, Journal of the American)所示统计协会 89 ,190-200)。这背后的想法是,如果模型很好地拟合(由于残差的近似正态性),这些截止值应该与大约5%和0.01%交叉。然而,这些截止值对应于细胞的个体显着性,而卡方检验评估整体显着性。

有两种策略可以解决这个问题:(1)由于Friendly(1994)阴影旨在显示偏差的模式而不是直接对应意义,可以简单地修改截止值以降低对给定表有效的值(例如,此处为1和1.8)。 (2)切换到最大绝对残差(而不是它们的平方和)的测试,以便可以对在某些显着性水平(例如,10%和1%)显着的所有细胞进行着色。这两种策略都在vcd中实现,并在?shading_hcl的示例中进行了说明(使用与mat具有非常相似属性的示例)。 Zeileis,Meyer,Hornik(2007)对基本思想进行了解释。 “用于可视化(条件)独立的基于残差的阴影”,计算和图形统计学杂志 16 (3),507-525。 doi:10.1198/106186007X237856

策略(1)可以通过以下方式应用于您的数据:

mosaic(mat, gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))

mosaic-hcl 策略(2)实现为:

set.seed(403)
mosaic(mat, gp = shading_max)

mosaic-max

答案 1 :(得分:1)

不是一个优雅的解决方案,但您可以使用gpar

手动定义颜色
mosaic(mat, shade=T, colorize = T, gp = gpar(fill=matrix(c("red","blue","light green", "green", "black","red","brown","white","blue"), 3, 3)))

下一步是使用合理的颜色填充gpar中的矩阵。这里有一篇关于如何根据值分配颜色渐变的相当不错的帖子。 https://stackoverflow.com/a/6320940/1502898