r - ggplot循环中绘图大小的大小写取决于大小写
问题描述
我在一个循环中运行了几个 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
大小写,具体取决于值。我已经尝试过使用 eg expand_limits(y = max(df$value * ifelse(df$value <= 50, 0.6, 1)))
,但这并不像我希望的那样工作。任何建议将不胜感激!
解决方案
根据@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)))
。
推荐阅读
- r - R中for循环中的非整数排序
- http - URL“/?v1 =”背后的目的是什么
- c# - C# Datatable .AsParallel() AsOrdered() 没有按顺序提供数据
- java - 如何比较java Set中的键值
- r - 使用 dplyr 一次转换不同格式的日期
- sql-server - ASP.NET Core MVC 和 Entity Framework 输出参数在调用存储过程时不返回
- javascript - Vue.js 将回调作为 prop 传递给子组件,并在单击时在父组件上执行
- testing - Testcafe 检查 DOM 元素是否不存在
- java - 试图解决一个包裹比另一个包裹更贵的情况下显示运输成本的问题(Java)
- ios - 显示和开销对 iOS 的高电池影响