Составление схемы размещения и заливки текста - PullRequest
2 голосов
/ 12 октября 2011

Я пытаюсь построить макет рандомизации в R / графике.

Trt <- c(paste ("Trt#", 1:10, sep = ""))
    mydes <- data.frame (block1= sample(Trt), block2 = sample(Trt), block3= sample(Trt), block4= sample( Trt), block5= sample(Trt))
    plot(c(0, NCOL(mydes)), c(0, NROW(mydes)), type= "n", xlab="blocks", ylab = "range")
    grid(lty = 2, col = 1)

    mydes 
       block1 block2 block3 block4 block5
    1  Trt#10  Trt#5  Trt#4  Trt#6  Trt#8
    2   Trt#6  Trt#8  Trt#9  Trt#2  Trt#3
    3   Trt#3  Trt#6  Trt#5 Trt#10  Trt#9
    4   Trt#9  Trt#4  Trt#1  Trt#5  Trt#2
    5   Trt#5  Trt#9  Trt#7  Trt#3  Trt#5
    6   Trt#7  Trt#3  Trt#3  Trt#7  Trt#7
    7   Trt#8 Trt#10  Trt#8  Trt#4  Trt#4
    8   Trt#1  Trt#7 Trt#10  Trt#9  Trt#1
    9   Trt#4  Trt#1  Trt#2  Trt#1 Trt#10
    10  Trt#2  Trt#2  Trt#6  Trt#8  Trt#6

Я хочу добавить текст в середине каждого прямоугольника сетки.Я знаю, что могу сделать это мучительно, добавив текст и указав координаты одну за другой.Но я хочу обобщенное решение с некоторым замыканием, которое можно применять и к любым другим измерениям.

Спасибо;

Ответы [ 2 ]

5 голосов
/ 12 октября 2011

Вот способ сделать это в ggplot:

library(ggplot2)

blocks <- expand.grid(
  x = 1:ncol(mydes),
  y = 1:nrow(mydes)
)

blocks$label <- unname(rapply(mydes, as.character))

ggplot(blocks) + 
  geom_rect(aes(xmin=x-0.4, xmax=x+0.4, ymin=y-0.4, ymax=y+0.4), fill="cyan") +
  geom_text(aes(label=label, x=x, y=y)) +
  xlab("Blocks") + ylab("Treatments")

enter image description here

Поскольку вы хотите построить график, а не просто печатать таблицу, вы можете также использовать цветовую шкалу для отображения обработок с тем же значением:

ggplot(blocks) + 
  geom_rect(aes(xmin=x-0.4, xmax=x+0.4, ymin=y-0.4, ymax=y+0.4, fill=label)) +
  geom_text(aes(label=label, x=x, y=y)) +
  xlab("Blocks") + ylab("Treatments") +
  scale_fill_hue("Treatment", h=c(90, 150))

enter image description here

0 голосов
/ 12 октября 2011

Вы можете попробовать это:

x = rep(1:5, each = 10) - 0.5
y = rep(1:10, 5) - 0.5
text(x, y, labels = unlist(mydes))

Проблема в том, что ваша сетка содержит 2 ячейки в направлении у ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...