base plot与ggplot2语法比较

通过base plot和ggplot2的简单实例,直接感受下base plot和ggplot2的语法差别。

条形图

  • 基本绘图

barplot()是基本绘图中绘制条形图的函数,需要一个向量参数指定bar的高度(必须),每个bar的label是可选参数。

  • ggplot2

ggplot2中绘制bar plot使用geom_colgeom_bar, 注意这里使用factor将x变量转换为离散变量。

1
2
3
4
5
6
7
8
9
10
library(ggplot2)

# Bar graph of values. This uses the BOD data frame, with the
# "Time" column for x values and the "demand" column for y values.
ggplot(BOD, aes(x = Time, y = demand)) +
geom_col()

# Convert the x variable to a factor, so that it is treated as discrete
ggplot(BOD, aes(x = factor(Time), y = demand)) +
geom_col()

直方图

  • 基本绘图

hist是基本绘图中直方图的函数。

  • ggplot2

ggplot2中绘制直方图使用geom_histogram()

1
2
3
4
5
6
7
8
library(ggplot2)
ggplot(mtcars, aes(x = mpg)) +
geom_histogram()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# With wider bins
ggplot(mtcars, aes(x = mpg)) +
geom_histogram(binwidth = 4)

箱线图

  • 基本绘图

箱线图可以直接用plot()函数(如果x变量是factor,会自动产生bo x plot), 当然也可以用boxplot()函数。如果想在X轴展示两个变量,也是可以的。

1
2
3
plot(ToothGrowth$supp, ToothGrowth$len)
# Formula syntax
boxplot(len ~ supp, data = ToothGrowth)

1
2
# Put interaction of two variables on x-axis
boxplot(len ~ supp + dose, data = ToothGrowth)

  • ggplot2

ggplot2使用geom_boxplot() 函数,x轴展示两个变量时可以用interaction()函数

1
2
3
library(ggplot2)
ggplot(ToothGrowth, aes(x = supp, y = len)) +
geom_boxplot()

x轴展示两个变量

1
2
ggplot(ToothGrowth, aes(x = interaction(supp, dose), y = len)) +
geom_boxplot()

小结

  • 条形图、直方图、箱线图的区别

    条形图x和y变量是一对一的关系,绘图时必须传递y变量。直方图是频率分布图,箱线图x变量对应的y变量有多个值。

  • Base plot和ggpplot2的绘图特征

    Base plot直接指定变量参数即可,ggplot2的语法通常包括3个部分,首先是数据框,然后以aes指定参数变量,再加上图形的类型,如geom_boxplot等

  • 箱线图展示一对变量的特征

如果用base plot实现,可以直接在x参数变量后加上另一个参数,如果是ggplot2,借助interaction()将一对变量添加。

个人感觉这里base plot画的图更简单好看。