Постройте таблицу в R в формате ячейки с цветом фона

У меня есть таблица с 2 столбцами. Первый столбец — это имя теста, а второй столбец — успех/неудача теста. Я хочу построить это таким образом, чтобы область графика была разделена на сетки квадратов/прямоугольников, и каждое имя теста принадлежало одному квадрату/прямоугольнику. Цвет фона должен быть зеленым, если тест прошел успешно, и красным в противном случае. В основном карта дерева, но со всеми прямоугольниками одинакового размера.

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

Я хочу, чтобы это было построено таким образом, чтобы были сформированы 4 ячейки с именем теста, отображаемым в центре. Цвет фона для блока test3 должен быть красным и зеленым для остальных. Я пытался использовать пакет древовидной карты и функцию map.market пакета портфолио, но обе они являются функциями древовидной карты, и даже после того, как параметр размера был одинаковым для всех, они по-прежнему дают мне разные размеры для каждой ячейки.

Любая помощь будет принята с благодарностью.


person Avinash    schedule 03.04.2013    source источник


Ответы (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")

Вот что я получаю:

введите здесь описание изображения

Я оставлю вам любые дальнейшие незначительные изменения, которые вы можете искать.

person Arun    schedule 03.04.2013
comment
Я думал сделать это, но это казалось излишним. И у меня нет фиксированного количества тестов. Это может измениться, так как это будет частью более крупного приложения. Но да, я думаю, я мог бы написать функцию для динамического создания матрицы xmax ymax на основе количества тестов. - person Avinash; 03.04.2013
comment
Забавно, что ты не упомянул об этом тогда. Все, что вам нужно сделать, это сгенерировать, в зависимости от количества ваших тестов, xmin, xmax, ymin и ymax. - person Arun; 03.04.2013

Это также можно сделать с помощью пакета 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 (как ответ выше), его трудно превзойти для дальнейшей настройки и настройки.

person Martijn Tennekes    schedule 04.04.2013
comment
Я попробовал эту функцию, но для области столбца, даже если я задаю 1 для всех строк, я получал разный размер для каждого поля для большего количества тестов. Спасибо за ваш вклад. Эстетику ggplot2 также сложно превзойти. - person Avinash; 08.04.2013

Довольно простое 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")

введите здесь описание изображения

person plannapus    schedule 04.04.2013