Графика двоичной переменной в R - PullRequest
3 голосов
/ 04 июня 2011

Я хотел бы построить простую графику.У меня есть набор данных с n строк и k столбцов, в которых каждая строка имеет последовательность 0 и 1. Я хотел бы построить именно эту последовательность для всех строк.

На самом деле я хочу воспроизвести рисунок 24.1, с.516, из книги Гельмана и Хилла (Анализ данных с использованием регрессии и многоуровневых / иерархических моделей).Я подозреваю, что он сделал графику в латексе, но кажется довольно нелепым, что я не могу воспроизвести эту простую графику в R. Фиг.Как видно из ссылки, «единицы» заменяются на «S», а «нули» на «.».Это простой график, но он показывает каждый отдельный ответ по времени.

Ответы [ 3 ]

4 голосов
/ 04 июня 2011

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

Данная матрица tbl, содержащая ваши данные:

tbl <- matrix(data=rep(0:1,25), nrow=5)

Вы можете создать сюжет как:

plot(1, 1, xlim=c(1,dim(tbl)[2]+.5), ylim=c(0.5,dim(tbl)[1]), type="n")
lapply(1:dim(tbl)[1], function(x) {
  text(x=c(1:dim(tbl)[2]), y=rep(x,dim(tbl)[2]), labels=tbl[x,])
})

Используя это в качестве основы, вы можете поиграться с text и сюжетом args, чтобы стилизовать сюжет так, как вы хотите.

3 голосов
/ 04 июня 2011

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

generate.data <- function(rate=.3, dim=c(25,25)) {
  tmp <- rep(".", prod(dim))
  tmp[sample(1:prod(dim), ceiling(prod(dim)*rate))] <- "S"
  m <- matrix(tmp, nr=dim[1], nc=dim[2])
  return(m)
}
  1. Текстовый вывод

    x <- generate.data()
    rownames(x) <- colnames(x) <- 1:25
    capture.output(as.table(x), file="res.txt")
    

    Файл res.txt содержит печатную версию вывода консоли; Вы можете конвертировать его в PDF, используя любой конвертер TXT в PDF (я использую один из PDFlib). Вот скриншот текстового файла:

    enter image description here

  2. Вывод на основе изображения

    Во-первых, вот функция построения, которую я использовал:

    make.table <- function(x, labels=NULL) {
      # x = matrix
      # labels = list of labels for x and y
      coord.xy <- expand.grid(x=1:nrow(x), y=1:ncol(x))
      opar <- par(mar=rep(1,4), las=1)
      plot.new() 
      plot.window(xlim=c(0, ncol(x)), ylim=c(0, nrow(x)))
      text(coord.xy$x, coord.xy$y, c(x), adj=c(0,1)) 
      if (!is.null(labels)) {
        mtext(labels[[1]], side=3, line=-1, at=seq(1, ncol(x)), cex=.8)
        mtext(labels[[2]], side=2, line=-1, at=seq(1, nrow(x)), cex=.8, padj=1)
      }
      par(opar)
    }
    

    Тогда я называю это

    make.table(x, list(1:25, 1:25))
    

    и вот результат (сохраните его как png, pdf, jpg или любой другой).

    enter image description here

2 голосов
/ 04 июня 2011

Насколько я вижу, это текстовая таблица.Мне интересно, почему вы хотите сделать это графиком?В любом случае, быстрые решения (в любом случае)

  1. составляют текстовую таблицу (путем программирования или набора текста) и делают ее снимок экрана и встраивают изображение в график.

  2. создайте пустой график и поместите текст на график, запрограммировав R с помощью функции «текст».Для получения дополнительной информации о «тексте» см. http://cran.r -project.org / doc / contrib / Lemon-kickstart / kr_adtxt.html

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