R 中的条形图和直方图(附示例)
条形图是显示 x 轴上的分类变量的绝佳方式。这种类型的图表在 y 轴上表示两个方面。
- 第一个计算组间发生的次数。
- 第二个显示 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") |