Я создал график с данными, показывающими смещение на двух разных участках на основе двух основных факторов (Сезон и Воздействие), которые оба помечены по оси X. Я хотел бы отредактировать ось X для сезонов, чтобы она была не в алфавитном порядке, а помечена как весна - зима (вместо осени - зима). Во втором ряду показаны экспозиции; это два набора меток Exposed; Я вижу, что это потому, что он центрируется на каждом из трех ярлыков ярлыков Season, но не может исправить это.
Если возможно, я также хотел бы изменить цвета моих баров в зависимости от сезона с более светлым оттенком того же цвета для второго участка. В идеале, зеленый для весны, желтый для лета, коричневый для осени и серый для зимы, а также между галочкой между сезонами и более длинной галочкой между экспозициями
требуемый цветовой код, выводимый из Excel
Я пытался использовать этот код;
Season <- as.character(data$Season)
#Then turn it back into a factor with the levels in the correct order
Season <- factor(data$Season), levels=unique(data$Season)
Исправить алфавитный порядок для Сезонов, но это ничего не делает, даже после того, как я исправил метки в моем CSV. файл в правильном порядке.
Это мой полный код, который я использую в данный момент, который был любезно предоставлен мне пользователем переполнения стека по предыдущему вопросу.
вывод из R с использованием текущего кода
library(ggplot2)
library(gtable)
library(grid)
Season <- (data$Season)
Site <- (data$Site)
Exposure <- (data$Exposure)
Average <- data$Average
SEM <- data$SEM
gg <- ggplot(aes(x=as.factor(Site), y=Average, fill=as.factor(Site)), Season, data = data)
gg <- gg + geom_bar(stat = 'identity')
gg <- gg + scale_fill_discrete(guide_legend(title = 'Site'))
gg <- gg + scale_fill_manual(values=c('black', 'grey85'), guide_legend(title = 'Site'))
gg <- gg + theme_classic()
gg <- gg + geom_errorbar(aes(ymin=Average-SEM, ymax=Average+SEM), width=.3)
gg <- gg + facet_wrap(~Exposure*Season, strip.position=c('bottom'), nrow=1, drop=F)
gg <- gg + scale_y_continuous(expand = expand_scale(mult = c(0, .05)))
gg <- gg + theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
axis.title.x = element_blank(),
axis.line = element_line(color='black'),
strip.placement = 'outside',
panel.spacing.x=unit(0, "lines"),
panel.grid.major.x = element_blank(),
panel.grid = element_blank(),
panel.background = element_rect(fill='white'),
strip.background = element_rect(fill='white', color='white')
)
print(gg)
season.levels <- levels(data$Season)
exposure.levels <- levels(data$Exposure)
g <- ggplotGrob(gg)
grob.numbers <- grep("strip-b", g$layout$name)
b.strips <- gtable_filter(g, "strip-b", trim = FALSE)
season.left.panels <- seq(1, by=length(levels(data$Exposure)), length.out = length(season.levels))
season.right.panels <- seq(length(exposure.levels), by=length(exposure.levels), length.out = length(season.levels))
left <- b.strips$layout$l[season.left.panels]
right <- b.strips$layout$r[season.right.panels]
top <- b.strips$layout$t[3]
bottom <- b.strips$layout$b[3]
mat <- matrix(vector("list", length = 10), nrow = 2)
mat[] <- list(zeroGrob())
for (i in 1:length(season.levels)) {
res <- gtable_matrix("season.strip", mat, unit(c(1, 0, 1, 0, 1), "null"), unit(c(1, 1), "null"))
season.left <- season.left.panels[i]
res <- gtable_add_grob(res, g$grobs[[grob.numbers[season.left]]]$grobs[[3]], 2, 1, 2, 5)
for (j in 0:2) {
exposure.x <- season.left+j
res$grobs[[c(1, 5, 9)[j+1]]] <- g$grobs[[grob.numbers[exposure.x]]]$grobs[[3]]
}
new.grob.name <- paste0(levels(data$Season)[i], '-strip')
g <- gtable_add_grob(g, res, t = top, l = left[i], b = top, r = right[i], name = c(new.grob.name))
new.grob.no <- grep(new.grob.name, g$layout$name)[3]
g$grobs[[new.grob.no]]$grobs[[nrow(g$grobs[[new.grob.no]]$layout)]]$children[[3]]$children[[3]]$gp <- gpar(fontface='bold')
}
grid.newpage()
grid.draw(g)