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()作为几何对象。

输出

Bar chart: count

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

Bar chart: count

自定义图形

可以将四个参数传递给自定义图形

- `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参数更改颜色。在这里,您选择珊瑚色。

输出

Change the Color of the Bars

您可以使用此代码

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。

输出

Change the Intensity

按组着色

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

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

代码解释

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

输出

Color by Groups

在条形中添加组

您还可以根据另一个因子级别进一步拆分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():创建条形图

输出

Add a Group in the Bars

该映射将使用两种颜色填充条形,每种颜色对应一个级别。通过选择数据集中其他因子变量来更改组非常容易。

条形图(百分比)

您可以将条形可视化为百分比,而不是原始计数。

# 条形图(百分比)

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

代码解释

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

输出

Bar Chart in Percentage

并排条形

可以轻松地将条形图与分组变量并排绘制。

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

代码解释

  • position=position_dodge():明确指示如何排列条形

输出

Side by Side Bars

直方图

在条形图教程的第二部分,您可以根据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”。

输出

Histogram

步骤3)更改方向

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

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

代码解释

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

输出

Histogram

步骤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变量的级别处理颜色。

输出

Histogram

步骤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的代码。这可以提高代码的可读性。

输出

Histogram

步骤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:设置文本大小。

输出

Histogram

摘要

当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")