如何按Y轴区间拆分ggplot绘图?请求技术协助
解决方案
你需要先根据Value的区间给数据添加分组列,再基于这个分组列实现分面,具体步骤如下:
1. 为数据添加Y轴区间分组
使用cut()函数将Value划分到你指定的区间,生成新的分组列Value_Group:
df$Value_Group <- cut(df$Value, breaks = c(0, 10, 15, 20, Inf), labels = c("0-10", "10-15", "15-20", "20及以上"), include.lowest = TRUE)
include.lowest = TRUE确保10被包含在0-10区间(默认左闭右开,开启后第一个区间包含端点);- 如果需要让
10归属10-15区间,可将right = FALSE加入参数。
2. 基于区间分组实现分面绘图
用新生成的Value_Group作为分面依据,替换原代码中错误的Time分面逻辑:
library(ggplot2) # 原数据定义 df <- data.frame(Category=c("a", "b", "c", "d", "e", "f", "g", "h"), Value=c(10,15,17,8,20,23,19,7), Time=c("Time1", "Time2", "Time1", "Time3", "Time2", "Time1", "Time3", "Time1")) # 添加区间分组 df$Value_Group <- cut(df$Value, breaks = c(0, 10, 15, 20, Inf), labels = c("0-10", "10-15", "15-20", "20及以上"), include.lowest = TRUE) # 按Y轴区间分面绘图 ggplot(df, aes(x=Time, y=Value, label=Category)) + geom_text() + theme_minimal() + facet_grid(Value_Group ~ ., scales = "free_y")
scales = "free_y"让每个子图的Y轴范围自动适配对应区间的数据,也可以去掉该参数让所有子图Y轴范围统一。
原代码问题说明
你之前的代码用facet_grid(Time ~ ., scales='free')是按Time字段分组分面,和你需要的按Y轴Value区间拆分逻辑不符,因此无法得到预期效果。
内容的提问来源于stack exchange,提问作者user21390049
相关产品推荐
相关产品推荐

