R - 条形图
R - 使用 ggplot2 绘制现代条形图
Section titled “R - 使用 ggplot2 绘制现代条形图”条形图使用矩形条形来表示分类数据,每个条形的长度与其所代表的值成比例。它是比较不同组之间值最常见且有效的方法之一。
与其他可视化图表一样,ggplot2 包是 R 中的现代标准。它提供了一个强大且声明式的系统,用于创建复杂的条形图。我们将重点关注两种主要的几何对象:geom_bar() 和 geom_col()。
语法:geom_col 与 geom_bar
Section titled “语法:geom_col 与 geom_bar”ggplot2 做出了一个重要的区分:
geom_col():当您拥有一个数据帧,其中一列代表类别(x 轴),而另一列代表条形高度(y 轴)时,使用此函数。这是绘制汇总数据最常见的场景。geom_bar():当您希望ggplot2计算单个列中每个类别的计数并使用这些计数作为条形高度时,使用此函数。它本质上是为分类数据创建直方图的快捷方式。
示例:从汇总数据创建条形图(geom_col)
Section titled “示例:从汇总数据创建条形图(geom_col)”让我们创建一个显示月度收入的条形图。我们的数据已汇总,因此我们将使用 geom_col()。
# 加载必要的库library(ggplot2)library(tibble)
# 创建一个 tibble,包含我们的数据monthly_revenue <- tibble( month = c("Mar", "Apr", "May", "Jun", "Jul"), revenue = c(27000, 32000, 28000, 39000, 41000))
# 创建条形图revenue_chart <- ggplot(data = monthly_revenue, aes(x = month, y = revenue)) + geom_col(fill = "#2E86C1", width = 0.7) + # 对预先存在的值使用 geom_col labs( title = "Monthly Revenue Performance", subtitle = "Q2 2023", x = "Month", y = "Revenue (in USD)" ) + # 根据月份在数据中的出现顺序重新排序,而不是按字母顺序 scale_x_discrete(limits = monthly_revenue$month) + # 将 y 轴标签格式化为货币样式 scale_y_continuous(labels = scales::dollar_format()) + theme_minimal()
# 显示图表print(revenue_chart)
# 保存图表ggsave("monthly_revenue_chart.png", width = 7, height = 5)此代码生成一个专业的条形图。x 轴正确地按数据帧中出现的顺序排列月份。y 轴以货币形式显示收入(例如,“$30,000”)。条形为蓝色,标题提供了清晰的上下文。
分组和堆叠条形图
Section titled “分组和堆叠条形图”ggplot2 的一个关键优势在于它能够通过将变量映射到 fill 等美学属性来创建复杂的图表。这使得创建分组或堆叠条形图变得异常简单。我们只需确保数据采用“长”格式。
# 加载库library(ggplot2)library(tibble)
# 以“长”格式创建数据,这非常适合 ggplot2regional_revenue <- tibble( month = rep(c("Mar", "Apr", 'May'), each = 3), region = rep(c("East", "West", "North"), times = 3), revenue = c(2, 9, 3, 11, 9, 4, 8, 7, 3) * 1000)
# 创建一个堆叠条形图(默认)stacked_chart <- ggplot(regional_revenue, aes(x = month, y = revenue, fill = region)) + geom_col() + # `fill = region` 告诉 ggplot 按区域着色并堆叠条形 labs(title = "Stacked Revenue by Region", x = "Month", y = "Total Revenue") + theme_classic()
print(stacked_chart)
# 创建一个分组(或“并排”)条形图grouped_chart <- ggplot(regional_revenue, aes(x = month, y = revenue, fill = region)) + # position = "dodge" 将条形并排放置 geom_col(position = "dodge") + labs(title = "Grouped Revenue by Region", x = "Month", y = "Revenue") + # 使用对色盲人士友好的调色板 scale_fill_brewer(palette = "Set2") + theme_bw()
print(grouped_chart)执行此代码会生成两个图表。第一个是堆叠条形图,其中每个月的来自不同区域的收入相互堆叠,显示总计。第二个是分组条形图,其中每个区域的条形每月并排放置,使得区域之间的直接比较更容易。ggplot2 会自动为 region 变量创建图例。