R 中的条形图和直方图(附示例)

条形图是显示 x 轴上的分类变量的绝佳方式。这种类型的图表在 y 轴上表示两个方面。

  1. 第一个计算组间发生的次数。
  2. 第二个显示 y 轴上变量的汇总统计数据(最小值、最大值、平均值等)。

您将使用具有以下变量的 mtcars 数据集:

  • cyl:汽车气缸编号。数值变量
  • am:变速器类型。0 表示自动,1 表示手动。数值变量
  • mpg:英里/加仑。数值变量

如何创建条形图

创建图表 R,您可以使用 ggplot 库来创建可发布的图表。这个库的基本语法是:

ggplot(data, mapping = aes()) +
geometric object 

arguments: 
data: dataset used to plot the graph 
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common objects are:

- Point: `geom_point()`
- Bar: `geom_bar()`
- Line: `geom_line()`
- Histogram: `geom_histogram()` 

在本教程中,您对创建条形图的几何对象 geom_bar() 感兴趣。

条形图:计数

您的第一张图表使用 geom_bar() 显示了圆柱体的频率。下面的代码是最基本的语法。

library(ggplot2)
# Most basic bar chart
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

代码说明

  • 您将数据集 mtcars 传递给 ggplot。
  • 在 aes() 参数中,将 x 轴添加为因子变量 (cyl)
  • + 号表示您希望 R 继续阅读代码。通过拆分代码,可以提高代码的可读性。
  • 使用 geom_bar() 获取几何对象。

输出:

条形图:计数

备注:确保将变量转换为因子,否则 R 会将变量视为数字。请参阅下面的示例。

条形图:计数

自定义图表

可以传递四个参数来定制图表:

- `stat`: Control the type of formatting. By default, `bin` to plot a count in the y-axis. For continuous value, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar	

更改条形的颜色

您可以更改条形的颜色。请注意,条形的颜色都是相似的。

# Change the color of the bars
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar(fill = "coral") +
    theme_classic()

代码说明

  • 条形图的颜色由几何对象内部的 aes() 映射控制(即不在 ggplot() 中)。您可以使用填充参数更改颜色。在这里,您可以选择珊瑚色。

输出:

更改条形的颜色

你可以使用这个代码:

grDevices::colors()

查看 R 中所有可用的颜色。大约有 650 种颜色。

改变强度

您可以增加或减少条形颜色的强度

# Change intensity
ggplot(mtcars,
        aes(factor(cyl))) +
    geom_bar(fill = "coral",
        alpha = 0.5) +
    theme_classic()

代码说明

  • 要增加/减少条形的强度,您可以更改 alpha 值。较大的 alpha 会增加强度,较小的 alpha 会降低强度。alpha 值的范围从 0 到 1。如果为 1,则颜色与调色板相同。如果为 0,则颜色为白色。您选择 alpha = 0.1。

输出:

改变强度

按组着色

您可以更改条形的颜色,即每组使用一种不同的颜色。例如,cyl 变量有三个级别,那么您可以使用三种颜色绘制条形图。

# Color by group
ggplot(mtcars, aes(factor(cyl),
        fill = factor(cyl))) +
    geom_bar()

代码说明

  • aes() 中的参数 fill 允许更改条形的颜色。您可以通过设置 fill = x 轴变量来更改颜色。在您的示例中,x 轴变量是 cyl;fill = factor(cyl)

输出:

按组着色

在栏目中添加群组

您可以根据另一个因子级别进一步拆分 y 轴。例如,您可以根据气缸类型计算自动和手动变速器的数量。

您将按如下方式进行:

  • 步骤 1:使用 mtcars 数据集创建数据框
  • 步骤 2:将 am 变量标记为 auto(自动变速器)和 man(手动变速器)。将 am 和 cyl 转换为因子,这样您就无需在 ggplot() 函数中使用 factor()。
  • 步骤 3:绘制条形图来统计按气缸计算的变速器数量
library(dplyr)
# Step 1
data <- mtcars % > % 
#Step 2
mutate(am = factor(am, labels = c("auto", "man")),
    cyl = factor(cyl))

您已经准备好数据集,可以绘制图表了;

# 第3步

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar() +
    theme_classic()

代码说明

  • ggpplot() 包含数据集数据和 aes()。
  • 在 aes() 中包含变量 x 轴以及填充条形所需的变量(即 am)
  • geom_bar():创建条形图

输出:

在栏中添加组

映射将用两种颜色填充条形图,每个级别一种颜色。通过选择数据集中的其他因子变量,可以轻松更改组。

百分比条形图

您可以以百分比而不是原始计数来显示该条形图。

# 百分比条形图

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = "fill") +
    theme_classic()

代码说明

  • 在 geom_bar() 参数中使用 position =“fill” 来创建 y 轴上有百分比的图形。

输出:

百分比条形图

并排栏

绘制带有组变量的条形图很容易。

# Bar chart side by side
ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = position_dodge()) +
    theme_classic()

代码说明

  • position=position_dodge():明确说明如何排列条形图

输出:

并排栏

直方图

在条形图教程的第二部分中,您可以用 y 轴上的值表示变量组。

您的目标是创建一个图表,其中包含每种气缸的平均每加仑英里数。要绘制信息图表,您需要遵循以下步骤:

  • 步骤 1:创建一个新变量,其中包含每个气缸的平均每加仑英里数
  • 步骤 2:创建基本直方图
  • 步骤 3:更改方向
  • 第 4 步:更改颜色
  • 步骤 5:更改大小
  • 步骤 6:向图表添加标签

步骤1) 创建一个新变量

您创建一个名为 data_histogram 的数据框,它仅返回汽车气缸数的每加仑平均英里数。您将这个新变量命名为 mean_mpg,并将平均值四舍五入为两位小数。

# 第1步

data_histogram <- mtcars % > %
mutate(cyl = factor(cyl)) % > %
group_by(cyl) % > %
summarize(mean_mpg = round(mean(mpg), 2))

步骤2) 创建基本直方图

您可以绘制直方图。它还不能直接传达给客户,但可以让我们直观地了解趋势。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity")

代码说明

  • aes() 现在有两个变量。cyl 变量表示 x 轴,mean_mpg 表示 y 轴。
  • 您需要传递参数 stat=”identity” 来将 y 轴中的变量作为数值引用。geom_bar 使用 stat=”bin” 作为默认值。

输出:

直方图

步骤3) 更改方向

您将图形的方向从垂直更改为水平。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity") +
    coord_flip()

代码说明

  • 您可以使用 coord_flip() 控制图形的方向。

输出:

直方图

步骤4) 改变颜色

您可以根据 x 轴变量的因子水平来区分条形的颜色。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    theme_classic()

代码说明

  • 您可以使用 fill= cyl 映射按组绘制图形。R 会根据 cyl 变量的级别自动处理颜色

输出:

直方图

步骤5) 改变大小

为了使图表看起来更漂亮,您可以减小条形的宽度。

graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity",
        width = 0.5) +
    coord_flip() +
    theme_classic()

代码说明

  • geom_bar() 中的 width 参数控制条的大小。值越大,宽度越大。
  • 注意,你将图存储在变量 graph 中。这样做是因为下一步不会改变变量 graph 的代码。这提高了代码的可读性。

输出:

直方图

步骤6) 向图表添加标签

最后一步是在标签中添加变量 mean_mpg 的值。

graph +
    geom_text(aes(label = mean_mpg),
        hjust = 1.5,
        color = "white",
        size = 3) +
    theme_classic()

代码说明

  • 函数 geom_text() 对于控制文本的美观很有用。
    • label=: 在栏内添加标签
    • mean_mpg:使用变量mean_mpg作为标签
  • hjust 控制标签的位置。接近 1 的值表示标签显示在条形图的顶部,而更高的值表示标签显示在条形图的底部。如果图表的方向是垂直的,请将 hjust 更改为 vjust。
  • color=”white”:更改文本的颜色。这里使用白色。
  • size=3:设置文本的大小。

输出:

直方图

总结

当 x 轴是分类变量时,条形图很有用。y 轴可以是计数或汇总统计数据。下表总结了如何使用 ggplot2 控制条形图:

目的 代码
计数
ggplot(df, eas(x= factor(x1)) + geom_bar()
用不同的填充颜色进行计数
ggplot(df, eas(x= factor(x1), fill = factor(x1))) + geom_bar()
分组计数、堆叠
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge())
并排计数
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar()
按组计数,以 % 形式堆叠
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge())
理念
ggplot(df, eas(x= factor(x1)+ y = x2) + geom_bar(stat="identity")