ggplot设置坐标轴范围:如何将Y轴固定为1-5?
解决ggplot翻转坐标轴后固定刻度范围的问题
你设置Y轴范围没生效的核心原因是用了coord_flip()翻转了坐标轴——原来的Y轴(对应mean数值)被转换成了翻转后的X轴,之前针对Y轴的配置自然作用不到目标轴上。
给你两种可行的解决办法:
方法一:直接针对翻转后的轴设置范围
既然翻转后mean对应X轴,那就把coord_cartesian的参数改成xlim:
n <- 10000 test <- data.frame(value = sample(1:5, size = n, replace = TRUE), grp = sample(c("A", "B", "C"), size = n, replace = TRUE), item = sample(c("Item1", "Item2", "Item3", "Item4", "Item5", "Item6"), size = n, replace = TRUE)) test %>% group_by(item, grp) %>% summarise(mean = mean(value, na.rm=TRUE)) %>% ungroup() %>% ggplot(aes(x = item, y = mean, group = grp, fill = grp)) + geom_col(position = 'dodge') + coord_cartesian(xlim=c(1, 5)) + # 修改为xlim coord_flip()
方法二:先设置原Y轴的范围和刻度,再翻转
用scale_y_continuous同时指定范围和刻度,之后再翻转坐标轴,ggplot会自动将配置映射到翻转后的对应轴:
n <- 10000 test <- data.frame(value = sample(1:5, size = n, replace = TRUE), grp = sample(c("A", "B", "C"), size = n, replace = TRUE), item = sample(c("Item1", "Item2", "Item3", "Item4", "Item5", "Item6"), size = n, replace = TRUE)) test %>% group_by(item, grp) %>% summarise(mean = mean(value, na.rm=TRUE)) %>% ungroup() %>% ggplot(aes(x = item, y = mean, group = grp, fill = grp)) + geom_col(position = 'dodge') + scale_y_continuous(limits = c(1,5), breaks = seq(1,5,1)) + # 先设置原Y轴 coord_flip()
两种方法都能帮你把目标轴的刻度范围固定在1到5之间。
内容的提问来源于stack exchange,提问作者D. Studer
相关产品推荐
相关产品推荐

