2

我有一个有 2 列的表。第一列是测试名称,第二列是测试的成功/失败。我想以这样一种方式绘制它,即绘图区域被分成正方形/矩形网格,每个测试名称都属于一个正方形/矩形。如果测试成功,则背景颜色应为绿色,否则为红色。基本上是一个树形图,但所有矩形的大小都相同。

    ret = data.frame("x" = c("test1","test2","test3","test4"), "y" = c("success","success","failure","success")) 

我希望将其绘制成 4 个单元格,测试名称显示在中心。test3 块的背景颜色应为红色和绿色,其余部分应为红色和绿色。我尝试使用树图包和投资组合包的 map.market 函数,但它们都是树图函数,即使在为所有人提供相同的大小参数之后,它们仍然为每个单元格提供不同的大小。

任何帮助将不胜感激。

4

3 回答 3

3

我会以这种格式获取数据:

# > ret
#       x       y xmin xmax ymin ymax
# 1 test1 success    0    3    0    1
# 2 test2 success    0    3    1    2
# 3 test3 failure    3    6    0    1
# 4 test4 success    3    6    1    2

然后这样做:

ggplot(ret, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax)) + 
          geom_rect(colour="white", alpha = 0.5, aes(fill=y)) + 
          scale_fill_manual(values=c("red", "green"), guide=FALSE) + 
          geom_text(aes(x=(xmin+xmax)/2, y=(ymin+ymax)/2, label=x)) + 
          theme_bw() + theme(axis.text.y = element_blank(), 
          axis.text.x = element_blank(), axis.ticks.x = element_blank(), 
          axis.ticks.y = element_blank(), panel.grid.major.x = element_blank(), 
          panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank(), 
          panel.grid.minor.y = element_blank()) + xlab("") + ylab("") + 
          ggtitle("My tests")

这就是我得到的:

在此处输入图像描述

我会将您可能寻求的任何进一步的小调整留给您。

于 2013-04-03T15:48:14.083 回答
2

也可以使用 treemap 包来完成:

ret$index <- factor(ret$x)
ret$area <- 1
ret$color <- factor((ret$x=="test3") + 1, labels=c("Green", "Red"))

tmPlot(ret, index="ind", 
   vSize="value2", 
   vColor="isgreen", 
   type="categorical",
   palette=c("darkolivegreen1", "darksalmon"),
   position.legend="none",
   fontsize.labels=14,       
   title="My test with the treemap package")

树状图

但是,一旦您有了 ggplot2 的有效解决方案(如上面的答案),就很难再进行进一步的调整和定制。

于 2013-04-04T08:56:59.280 回答
1

一个相当简单的base图形解决方案,使用函数image

tableplot <- function(ret, nrow, ncol, main){
    m <- matrix(as.integer(ret$y),nrow,ncol)
    image(1:nrow,1:ncol,m,col=c("red","green"),axes=FALSE, xlab="",ylab="",main=main)
    text(row(m),col(m),labels=matrix(ret$x,nrow,ncol))
    }

例子:

ret <- data.frame("x" = c("test1","test2","test3","test4"), "y" = c("success","success","failure","success"))
tableplot(ret, 2, 2, "My tests")

在此处输入图像描述

于 2013-04-04T09:19:09.753 回答