【问题标题】:Case dependent scaling of plot size in ggplot loopggplot循环中绘图大小的大小写取决于大小写
【发布时间】:2018-09-13 14:28:15
【问题描述】:

我正在循环运行几个 ggplot 条形图,包括在每个条形顶部添加文本。我通过coord_fixedexpand_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_fixedexpand_limits 的设置区分大小写,具体取决于值。我已经尝试过使用例如expand_limits(y = max(df$value * ifelse(df$value &lt;= 50, 0.6, 1))),但这并不像我希望的那样工作。任何建议将不胜感激!

【问题讨论】:

  • 试试expand_limits(y = max(df$value[df$group==i]) + 10) +?您可以将10 替换为适合您屏幕上的文本大小的其他任意大数字。

标签: r loops ggplot2 scale geom-bar


【解决方案1】:

根据@Z.Lin 的评论,我在ifelse 函数中添加了df$value[df$group==i] 参数:expand_limits(y = max(df$value[df$group==i] * ifelse(df$value[df$group==i] &lt;= 50, 5, 8)))

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2017-07-18
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2011-01-16
    相关资源
    最近更新 更多