2013-04-03 1 views
2

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

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

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

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

ответ

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

Это то, что я получаю:

enter image description here

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

+0

Я считал это делать, но, казалось, как массовое убийство. И у меня нет фиксированного количества тестов. Это может измениться, поскольку это будет частью большего приложения. Но, я думаю, я мог бы написать функцию для динамического создания матрицы xmax ymax на основе количества тестов. – Avinash

+0

Забавно, что вы не упомянули об этом. Все, что вам нужно сделать, это генерировать, в зависимости от количества тестов, которые вы имеете, xmin, xmax, ymin и ymax. – Arun

+0

Спасибо за помощь. – Avinash

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

Treemap

Но как только у вас есть рабочий раствор с ggplot2 (как выше ответ), что один трудно превзойти для дальнейшего настройка и настройка.

+0

Я пробовал эту функцию, но для области columne evn, если я даю 1 для всех строк, я получал разный размер для каждой коробки для большего количества тестов. Спасибо за ваш вклад. Эстетику ggplot2 также трудно превзойти. – Avinash

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

enter image description here

Смежные вопросы