【问题标题】:How to change color palette of mosaic plot如何更改马赛克图的调色板
【发布时间】:2015-04-24 01:39:37
【问题描述】:

我有以下数据和代码:

> 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)

卡方检验显示出显着差异,但由于残差很小,因此看不到颜色。残差越高,颜色越明显:

?mosaic 显示此信息:

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

如何更改上述绘图的填充颜色?

【问题讨论】:

    标签: r plot colors fill


    【解决方案1】:

    默认情况下,vcd 中马赛克图的阴影使用截止值 2 和 4 作为与每个像元相关的残差的绝对值,如 Friendly(1994 年,美国统计协会杂志)所建议的那样89,190-200)。这背后的想法是,如果模型拟合良好(由于残差的近似正态性),这些截止值应该与大约 5% 和 0.01% 交叉。然而,这些截止值对应于细胞的个体显着性,而卡方检验评估整体显着性。

    有两种策略可以解决这个问题:(1)Friendly (1994) 着色旨在带出偏差的模式,而不是直接对应重要性 em>,可以简单地将截止值修改为适用于给定表的较低值(例如,此处为 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)))
    

    策略(2)实现为:

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

    【讨论】:

    • 感谢您的回答。同时使用 shade=T 和 gp=shading_max 选项会产生更好的颜色。 gp_args 可以有一些自动变量而不是 c(1,1.8) 吗?
    • 同时设置shade = TRUEgp = shading_max 相当于只设置gp = shading_max。但请注意,最大测试是基于排列的,因此如果(在这种情况下)结果可以在显着和非显着之间切换(默认情况下以 5% 的水平判断),结果可能会发生变化。
    • 自动选择截止点很困难。基于推理的方法是使用最大统计量的临界值,如shading_max。其他截止值只是启发式方法,您可以使用正态分布的其他分位数,例如qnorm(c(0.85, 0.96)),或经验残差的分位数,例如quantile(abs(residuals(chisq.test(mat))), c(0.7, 0.9))。但是,这些可能会或可能不会在马赛克图的可视化中产生有用的模式。特别是后者将总是有彩色单元格,无论是否有意义。
    【解决方案2】:

    没有真正优雅的解决方案,但您可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      相关资源
      最近更新 更多