如何在R Studio中压缩图表视图?调整轴后无法看清数据
问题解决:调整ggplot的y轴范围与柱形填充色
数据集生成代码
首先是生成POP_data的代码:
library(tidyverse) library(dplyr) library(ggplot2) library(lubridate) new_dates <- economics %>% filter(date >= as.Date("2000-01-01") & date <= as.Date("2015-12-31")) %>% select(date, pce, pop, unemploy) grouped_data <- group_by(new_dates, year = lubridate::year(date)) aggregated_data <- summarise(grouped_data, average_PCE = mean(pce), average_POP = mean(pop), average_UNEMPLOY = mean(unemploy)) POP_data <- aggregated_data %>% select(year, average_POP)
注:原代码末尾的view()会弹出数据查看窗口,但不会返回数据框,可能导致POP_data无法正确赋值,建议移除
初始可运行绘图代码
以下代码可正常生成柱形图:
POP_data %>% ggplot(aes(x = year, y = average_POP)) + geom_col(color = "blue", width = .7, alpha =1) + labs(title = "Average Total Population From 2000 to 2015", x = "Year", y= "Average Total Population (in thousands)")
故障代码核心问题分析
修改后的代码试图缩小y轴范围并调整填充色,但出现柱子无法正常显示的问题,加na.omit()无效,核心原因有两点:
- y轴范围与数据单位不匹配:
economics数据集的pop字段单位是千人,因此average_POP的数值范围在27万左右(对应2.7亿实际人口),但代码里scale_y_continuous的limits设为2.7亿到3.3亿,远大于实际数据值,导致柱子被压缩到几乎看不见。 - 冗余的填充色设置:用
fill = "MyColor"会生成不必要的图例,完全可以简化操作。
修正后的代码
方案1:基于原数据单位(千人)调整y轴
POP_data %>% ggplot(aes(x = year, y = average_POP)) + geom_col(fill = "blue", color = "blue", width = .7, alpha = 1) + labs(title = "Average Total Population From 2000 to 2015", x = "Year", y = "Average Total Population (in thousands)") + scale_x_continuous(limits = c(2000, 2015), breaks = seq(2000, 2015, by = 5)) + scale_y_continuous(limits = c(270000, 330000), breaks = seq(270000, 330000, by = 20000))
方案2:转换为实际人口单位(人)调整y轴
如果想让y轴显示实际人口数,可先将average_POP乘以1000:
POP_data %>% mutate(average_POP = average_POP * 1000) %>% ggplot(aes(x = year, y = average_POP)) + geom_col(fill = "blue", color = "blue", width = .7, alpha = 1) + labs(title = "Average Total Population From 2000 to 2015", x = "Year", y = "Average Total Population (in persons)") + scale_x_continuous(limits = c(2000, 2015), breaks = seq(2000, 2015, by = 5)) + scale_y_continuous(limits = c(270000000, 330000000), breaks = seq(270000000, 330000000, by = 20000000))
额外说明
- 原代码中
view()会中断数据赋值流程,建议移除; - 单一填充色无需使用
scale_fill_manual,直接在geom_col里指定fill参数更简洁; na.omit()无效是因为数据本身无缺失值,问题根源是y轴范围与数据不匹配,和NA无关。
内容的提问来源于stack exchange,提问作者Kobe
相关产品推荐
相关产品推荐

