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

如何在R语言中绘制分组直方图并添加趋势线(含多年龄组趋势折线可视化需求)

Hey there! Let's tackle your R visualization tasks step by step using your sample data. First, let's get everything set up and break down each task with actionable code and explanations.


First: Prepare Your Data

First, let's load the sample data into R and reshape it to long format—this makes working with ggplot2 (R's go-to visualization package) way easier:

# Load required packages (install first if you haven't: install.packages("tidyverse"))
library(tidyverse)

# Create your sample data frame
age_data <- tibble(
  year = c(2000, 2005),
  `0-19years_old` = c(20000, 19800),
  `20-44years_old` = c(34000, 33000),
  `45-64years_old` = c(29000, 28500),
  `above_65years old` = c(16700, 17000)
)

# Reshape from wide to long format (critical for grouping in ggplot2)
age_data_long <- age_data %>%
  pivot_longer(
    cols = -year, 
    names_to = "age_group", 
    values_to = "count"
  )

1. Grouped Bar Plot (Grouped Histogram)

Since your x-axis is discrete years, a grouped bar plot is the right fit here. We'll assign unique colors to each age group and add a clear legend:

ggplot(age_data_long, aes(x = factor(year), y = count, fill = age_group)) +
  # Create grouped bars (position_dodge keeps bars side-by-side)
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  # Use a color palette with strong contrast
  scale_fill_brewer(palette = "Set1") +
  # Add descriptive labels
  labs(
    title = "Population Count by Age Group (2000 vs 2005)",
    x = "Year",
    y = "Population Count",
    fill = "Age Group"
  ) +
  # Clean up the theme
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12)
  )

This will give you side-by-side bars for each age group per year, with a legend mapping colors to age groups.


2. Trend Line Plot (Multiple Lines)

To show each age group's population change over time, we'll plot 4 distinct lines on the same canvas:

ggplot(age_data_long, aes(x = year, y = count, color = age_group, group = age_group)) +
  # Add thick lines for visibility
  geom_line(linewidth = 1.2) +
  # Add data points to highlight exact values
  geom_point(size = 3) +
  # Match the color palette from the bar plot for consistency
  scale_color_brewer(palette = "Set1") +
  labs(
    title = "Population Trend by Age Group (2000-2005)",
    x = "Year",
    y = "Population Count",
    color = "Age Group"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12)
  )

The group = age_group argument ensures ggplot connects the correct data points for each age group into a single line.


3. Adding Trend Lines to a Grouped Bar Plot

To overlay trend lines on your grouped bar plot, you need to align the lines with the position of each bar. Here's how to do it:

ggplot(age_data_long, aes(x = factor(year), y = count, fill = age_group)) +
  # Make bars slightly transparent so lines stand out
  geom_col(position = position_dodge(width = 0.8), width = 0.7, alpha = 0.7) +
  # Add trend lines (match dodge width to keep lines aligned with bars)
  geom_line(
    aes(group = age_group, color = age_group),
    position = position_dodge(width = 0.8),
    linewidth = 1
  ) +
  # Add points on top of lines for clarity
  geom_point(
    aes(color = age_group),
    position = position_dodge(width = 0.8),
    size = 3
  ) +
  # Reuse the same color palette for consistency
  scale_fill_brewer(palette = "Set1") +
  scale_color_brewer(palette = "Set1") +
  labs(
    title = "Population Count with Trend Lines by Age Group",
    x = "Year",
    y = "Population Count",
    fill = "Age Group",
    color = "Age Group"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12)
  )

If you had more years of data, you could replace geom_line() with geom_smooth(method = "lm", se = FALSE) to add a linear regression trend line instead of connecting individual points directly.


内容的提问来源于stack exchange,提问作者SHIRLEEN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:22:38