You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()无效,核心原因有两点:

  1. y轴范围与数据单位不匹配:economics数据集的pop字段单位是千人,因此average_POP的数值范围在27万左右(对应2.7亿实际人口),但代码里scale_y_continuous的limits设为2.7亿到3.3亿,远大于实际数据值,导致柱子被压缩到几乎看不见。
  2. 冗余的填充色设置:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:10:10