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()中)。您可以使用fill参数更改颜色。在这里,您选择珊瑚色。
输出
您可以使用此代码
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()包含数据集data和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控制条形图
目标 | 代码 |
---|---|
Count (计数) |
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") |