ggplot2 的基本概念

这些你可能暂时还不理解, 先知道有这个东西就好啦~

  • 数据(data)和映射(mapping)
  • 标度(Scale)
  • 几何对象(geometric)
  • 统计变换(statistics)
  • 坐标系统(Coordinate)
  • 图层(Layer)
  • 分面(Facet)

数据(data)和映射(mapping)

将数据中的变量映射到图形属性, 映射控制了二者之间的关系。

标度(Scale)

标度负责控制映射后图形属性的显示方式。具体形式上来看是图例和坐标刻度。它和 mapping 是紧密相关的概念。

几何对象(geometric)

代表你在图中实际看到的图形元素,如点、线、多边形等。

统计变换(statistics)

对原始数据进行某种计算,例如对二元散点图加上一条回归线。

坐标系统(Coordinate)

坐标系统控制坐标轴并影响所有图形元素,坐标轴可以进行变换以满足不同的需要。

图层(Layer)

图层可以允许用户一步步的构建图形,方便单独对图层进行修改、增加统计量、甚至改动数据。

分面(Facet)

条件绘图,将数据按某种方式分组,然后分别绘图。分面就是控制分组绘图的方法和排列形式。

基本作图方法

通过联系以下语法慢慢掌握绘图方法:

数据抽样

1
dsmall <- diamonds[sample(nrow(diamonds),100),]

qplot()

语法:

1
qplot(carat,price,data = diamonds)

添加颜色的方法(color):

1
qplot(carat,price,data = diamonds,colour = color)

创建半透明的颜色, 使用 alpha 图形属性(0-完全透明;1-完全不透明):

1
qplot(carat,price,data = diamonds,alpha= I(1/80))

geom 绘制几何对象

  • geom = “point” 绘制散点图
  • geom = “smooth” 拟合一条平滑曲线
  • geom = “boxplot” 绘制箱线胡须图
  • geom = “path” 和 geom = “line” 在数据点之间绘制连线
  • geom = “histogram” 绘制直方图
  • geom = “freqpoly” 绘制频率多边形
  • geom = “density” 绘制密度曲线
  • geom = “bar” 绘制条形图
  • geom = “jitter” 扰动点图

实例:

1
qplot(carat,price,data = diamonds,geom = c("point","smooth"))

method 方法

  • method = “gam” 拟合一个广义的可加模型
  • method = “lm” 拟合的是线性模型
  • method = “rlm” 更稳健的拟合方法

箱线图和扰动点图

扰动点图

1
qplot(color,price/carat,data = diamonds,geom = "jitter", alpha = I(1/5))

箱线图

1
qplot(color,price/carat,data = dsmall,geom = "boxplot")

直方图和密度曲线图

直方图

1
qplot(carat,data = diamonds,geom = "histogram")

密度曲线图

1
qplot(carat,data = diamonds,geom = "density")

binwidth 通过设定组距来调节平滑度.

其他拓展:

1
2
> qplot(carat,data = diamonds,geom = "density", colour = color)
> qplot(carat,data = diamonds,geom = "histogram", fill = color)

条形图

1
2
> qplot(color,data = dsmall,geom = "bar")
> qplot(color,data = diamonds,geom = "bar", weight = carat) +scale_y_continuous("carat")

时间序列中的线条图和路径图

用于可视化时间序列的展示.

1
2
> qplot(date, unemploy/pop,data = economics, geom = "line")
> qplot(date, uempmed,data = economics, geom = "line")

添加 color 可以明显的表示时间行进的方向:

1
2
3
> year <- function(x) as.POSIXlt(x)$year +1900
> qplot(unemploy/pop,uempmed, data = economics, geom = c("point","path"))
> qplot(unemploy/pop,uempmed,data = economics, geom = "path", color = year(date))

分面

分面是将数据分割成若干子集, 然后创建一个图形的矩阵, 将每一次子集绘制到图形矩阵的窗格中.

1
2
3
4
5
6
> qplot(carat,data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1, xlim = c(0,3))
Warning message:
Removed 32 rows containing non-finite values (stat_bin).
> qplot(carat, ..density..,data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1, xlim = c(0,3))
Warning message:
Removed 32 rows containing non-finite values (stat_bin).

其它选项

qplot 还有其他一些选项用于控制图形的外观:

  • xlim, ylim 设置 x 轴和 y 轴的显示区间
  • log 字符型向量, 说明哪一个坐标轴取对数
  • main 图形的主标题
  • xlab, ylab 设置 x 轴和 y 轴的标签文字

与 plot 的区别

  • qplot() 不是一个泛型函数
  • 可以将变量传递给你感兴趣的图形属性
  • ggplot2 中的图形属性名称更加直观, 且更容易记忆, 如 colour, shape, size
  • 在基础绘图系统中, 可以向已有图形添加更多属性或元素, ggplot2 中需要加入额外的图层

遇到的问题

在联系语法时遇到错误:

1
Error: Unknown parameters: method

解决办法:

http://stackoverflow.com/questions/35102453/r-not-plotting-says-unknown-parameter-method-ggplot2/35102567

参考文档

http://cos.name/wp-content/uploads/2012/05/3-xiaokai-ggplot2.pdf

《ggplot2. Elegant Graphics for Data Analytics》