Как создавать качественные качественные гистограммы - PullRequest
4 голосов
/ 22 декабря 2011

Вот мои данные:

ind <- c( rep(1, 20), rep (2, 20), rep (3, 20), rep(4, 20))
bar <- c(rep(rep(1:4, each = 5),  4))

mark <- c(rep ("A", 5), rep("B", 5), rep("C",5), rep("D",5),
          rep("B", 20), rep("C", 20), "A", "B", "C", "A", "C","A",
          "D", "D", "D", "D","A", "C", "C", "A", "B", "B","B",
          "C","C","C")

dataf <- data.frame(ind, bar, mark)

Каждый индивид (инд) имеет 4 бара по порядку и имеет цветное окаймление.Там должно быть больше места между людьми.Я мог бы иметь любое количество людей.Следующий ожидаемый график, нарисованный в Excel, я хочу вместо этого создать более симпатичный график в R.

enter image description here

Обратите внимание, что каждый уровень индекса (1: 4) как четыре бара (1: 4).Все четыре бара для каждого индекса сгруппированы в одном месте.

Ответы [ 2 ]

5 голосов
/ 22 декабря 2011

Вы можете попробовать использовать функцию rect для индивидуального построения каждого прямоугольника. Попробуйте запустить цикл для перебора каждого блока в стеке:

par(mfrow=c(2, 2))

for(i in unique(ind)) {
  plot(0, col=0, bty="n", xaxt="n", yaxt="n", xlab = i, ylab = "", xlim=c(0, 5), ylim=c(-6, -1))
  for(j in 1:4) {
    for(k in 1:5) {
      rect(j-0.4, -k-1, j+0.4, -k, col = which(unique(mark)==matrix(mark[ind==i], 5, 4)[k,j])+1, border = rgb(0,0,0,0))
      text(j, -k-0.5, labels = matrix(mark[ind==i], 5, 4)[k,j])
    }
    rect(j-0.4, -6, j+0.4, -1)
  }
}

enter image description here

4 голосов
/ 22 декабря 2011

Вот один вариант использования ggplot:

dataf$y <- rep(5:1,times = 16)

ggplot(dataf,aes(x=bar,y=y)) + 
    facet_wrap(~ind) +
    geom_tile(aes(fill = mark),colour = "black") + 
    geom_text(aes(label = mark)) + 
    labs(x = NULL,y = NULL) +
    opts(axis.text.x = theme_blank(),axis.text.y = theme_blank())

enter image description here

Поскольку я использую geom_tile, вы теряете разделение между «барами». Думаю, что единственной другой опцией будет использование geom_rect, и указание координат для этого будет более сложным.

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