цикл for для барплотов меняет пар (mfrow) и позицию заголовка - PullRequest
0 голосов
/ 12 апреля 2019

Для отчета я обобщаю данные по группам.Из-за проблем с авторским правом я создал несколько фиктивных данных ниже (сначала столбец - группа, затем значения):

  X   A   B  C D
1   1  12   0 12 0
2   2  24   0 15 0
3   3  56   0 48 0
4   4  89   0 96 0
5   5  13   3 65 0
6   6  11  16  0 0
7   7  25  19  0 0
8   8  24  98  0 0
9   9  18 111  0 0
10 10 173 125  0 0
11 11  10  65  0 0

Я хотел бы создать столбец для каждой группы (1:11) с циклом:

for(i in 1:11){x<-dummyloop[i,]
  barplot(as.matrix(x), main=paste("Group", i), ylim=c(0,200))}

Это работает, я получаю график для каждого цикла, однако они заканчиваются в одном 4 для окна графика, как если бы я использовал par (mfrow = c (4,4)).Мне нужны отдельные гистограммы.

Поэтому я использовал par (mfrow = c (1,1)), что по какой-то причине решило проблему (я не использую par EVER, потому что я экспортирую только длянаучный отчет с отдельными графиками), однако «главный» обрезан сверху.

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

 for(i in 1:11){x<-dummyloop[i,]
      barplot(as.matrix(x), main=paste("Group", i), col=c(1:5), 
ylim=c(0,200))}

Понимая, что вектор окраски использует только первый цвет, я попробовал варианты этого:

for(i in 1:11){x<-dummyloop[i,]
  barplot(as.matrix(x), main=paste("Group", i), col=c(4:10)[1:ncol(x)], 
ylim=c(0,200))}

, который не справляется с задачей ...

Кажется, мне не хватает некоторого ключаподробно в цикле здесь, спасибо за помощь.Я новичок R, поправляющийся каждый день благодаря людям здесь;).

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Понятия не имею, почему это в базовом сюжете. Вот альтернативный способ с ggplot2.


for(i in 1:11){x<- gather(data[i,])
print(ggplot(data = x, aes(x = key, y = value, fill = cols)) +
  geom_bar(stat = "identity", show.legend = FALSE) + 
    ggtitle(paste("Group ", i)) + theme(plot.title = element_text(hjust = 0.5)) +
    ylim(0,200))  
  }

Так ваш main все еще отрезан?

Затем увеличьте поле в верхней части графика. Выполнение:


par(mar = c(2, 2, 3 , 2)) # c(bottom, left, top, right)

Перед построением. Вы можете сбросить свои спецификации с помощью dev.off() во время экспериментов.

0 голосов
/ 12 апреля 2019

Оставаясь на базе R, вы можете просто использовать by и установить col в соответствии с группой.

colors <- rainbow(length(unique(dat$X)))  # define colors, 11 in your case

by(dat, dat$X, function(x) 
  barplot(as.matrix(x), main=paste("Group", x$X), ylim=c(0, 200), col=colors[x$X]))

Данные

dat <- structure(list(X = 1:11, A = c(12L, 24L, 56L, 89L, 13L, 11L, 
25L, 24L, 18L, 173L, 10L), B = c(0L, 0L, 0L, 0L, 3L, 16L, 19L, 
98L, 111L, 125L, 65L), C = c(12L, 15L, 48L, 96L, 65L, 0L, 0L, 
0L, 0L, 0L, 0L), D = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L)), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10", "11"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...