Зависящее от регистра масштабирование размера графика в цикле ggplot - PullRequest
0 голосов
/ 13 сентября 2018

Я запускаю несколько барограмм ggplot в цикле, включая добавленный текст в верхней части каждой панели. Я определил масштаб графика с помощью coord_fixed и expand_limits. К сожалению, ось Y отличается от графика к графику, так что настройки масштаба подходят не во всех случаях, то есть текст обрезается и / или оси сжимаются. Позвольте мне проиллюстрировать:

period <- c(rep("A",4),rep("B",4))
group <- rep(c("C","C","D","D"),2)
size <- rep(c("E","F"),4)
value <- c(23,29,77,62,18,30,54,81)
df <- data.frame(period,group,size,value)

library(ggplot2)

for (i in levels(df$group)) 
{
p <- ggplot(subset(df, group==i), aes(x=size, y=value,  fill = period)) + 
     geom_bar(position="dodge", stat="identity", show.legend=F) +
     geom_text(data=subset(df, group==i), aes(x=size, y=value,label=value),
               size=10, fontface="bold", position = position_dodge(width=1),vjust = -0.5) +
     expand_limits(y = max(df$value)*0.6) + 
     coord_fixed(ratio = 0.01)

ggsave(paste0("yourfilepath",i,".png"), width=7.72, height=4.5, units="in", p)
}

Я бы хотел, чтобы настройки coord_fixed и expand_limits были чувствительными к регистру, в зависимости от значения. Я экспериментировал с использованием, например, expand_limits(y = max(df$value * ifelse(df$value <= 50, 0.6, 1))), но это не работает так, как я надеялся. Любые предложения будут с благодарностью!

1 Ответ

0 голосов
/ 17 сентября 2018

Основываясь на комментарии @ Z.Lin, я добавил аргумент df$value[df$group==i] в свою функцию ifelse: expand_limits(y = max(df$value[df$group==i] * ifelse(df$value[df$group==i] <= 50, 5, 8))).

...