Как сделать три разных гистограммы одинакового типа, сгруппированных на одном графике? - PullRequest
1 голос
/ 19 сентября 2019

Мне нужно сопоставить свои значения эрозии для разных уровней обработки почвы (колонны) с тремя уровнями глубины почвы (строки (A1, A2, A3)).Я хочу, чтобы все это было показано в виде диаграммы на одном графике.

Вот воспроизводимый пример:

a<- matrix(c(1:36), byrow = T,  ncol = 4)
rownames(a)<-(c("A1","B1","C1","A2","B2","C2","A3","B3","C3"))
colnames(a)<-(c("Int_till", "Redu_till", "mulch_till", "no_till"))

barplot(a[1,], xlab = "A1", ylab = "Erosion") 
barplot(a[4,], xlab = "A2", ylab = "Erosion")
barplot(a[7,], xlab = "A3", ylab = "Erosion")
##I want these three barchart side by side in a single plot
## for comparison 

### and need similar plots for all the "Bs" and "Cs"  
### Lastly, i want these three plots in the same page.

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

Если бы какое-то тело могло помочь мне с этими двумя вещами ... Это будет отличная помощь.Я буду признателен.

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Мы можем использовать ggplot

library(reshape2)
library(ggplot2)
library(dplyr)
melt(a) %>%
      ggplot(., aes(x = Var2, y = value, fill = Var1)) + 
         geom_bar(stat = 'identity',
              position = position_dodge2(preserve = "single")) + 
         facet_wrap(~ Var1)
1 голос
/ 19 сентября 2019

Установите mfcol, чтобы указать сетку 3x3, а затем для каждой строки создайте ее гистограмму.Кроме того, вы можете добавить barplot аргумент ylim = c(0, max(a)), чтобы все графики использовали одну и ту же ось Y.title и mtext могут использоваться для установки общего заголовка и различного текста поля, как мы делаем ниже.См. ?par, ?title и ?mtext для получения дополнительной информации.

opar <- par(mfcol = c(3, 3), oma = c(0, 3, 0, 0))
for(r in rownames(a)) barplot(a[r, ], xlab = r, ylab = "Erosion")
par(opar)

title("My Plots", outer = TRUE, line = -1)
mtext(LETTERS[1:3], side = 2, outer = TRUE, line = -1, 
  at = c(0.85, 0.5, 0.17), las = 2)

screenshot

...