黑色和白色的马赛克情节/网格图为假人

时间:2017-06-30 10:34:09

标签: r plot ggplot2 vcd

我有一个由傻瓜组成的数据集,如下所示:

public function beforeValidate($options=array())
{
  $sum = 0;
  $sum += (isset($this->data['MyModel']['num_a'])) ? $this->data['MyModel']['num_a'] : 0;
  $sum += (isset($this->data['MyModel']['num_b'])) ? $this->data['MyModel']['num_b'] : 0;
  $sum += (isset($this->data['MyModel']['num_c'])) ? $this->data['MyModel']['num_c'] : 0;
  $sum += (isset($this->data['MyModel']['num_d'])) ? $this->data['MyModel']['num_d'] : 0;

  if ($sum > 0) {
    $this->validationErrors['num_all'][] = 'There were no a, b, c or d selected.'
  }
}

我想创建一个马赛克图/网格图(实际上我不确定应该如何调用这样的图),其中每个1值以黑色显示,每个0值以白色显示。显示的行之间不应有空格或任何其他颜色。

我想要创建的情节示例可以在this paper on page 97中找到:

enter image description here

我尝试了几个不同的软件包,例如# Example data set.seed(123) data <- data.frame(x1 = rbinom(10, 1, 0.3), x2 = rbinom(10, 1, 0.6), x3 = rbinom(10, 1, 0.5)) ggplot2,但不幸的是我无法生成完全相同的情节。任何帮助或包装的任何提示都非常感谢!

2 个答案:

答案 0 :(得分:3)

image函数可能是显示颜色矩阵的最简单方法。您需要转置和反转它以使订单正确

image(t(as.matrix(data[nrow(data):1, ])), col = c(0, 1), axes = FALSE)
axis(1, seq(0, 1, l = ncol(data)), seq_len(ncol(data)))
axis(2, seq(0, 1, l = nrow(data)), seq_len(nrow(data)))
legend(1.1, 0, c(0:1), fill = c(0, 1), xpd = TRUE)

enter image description here

答案 1 :(得分:2)

这是使用 ggplot

library(ggplot2)
library(tidyr) #to convert wide to long format

plotDat <- gather(data, key = "x", value = "Estimate")
plotDat <- cbind(plotDat, y = 1:10)
plotDat$Estimate <- as.factor(plotDat$Estimate)

ggplot(plotDat, aes(x, y, fill = Estimate)) +
  geom_tile()

enter image description here