ggplot2, R语言最为强大的作图软件包,没有之一

层 (Layer)

ggplot2 功能包的两大函数:

使用airquality的数据,运用qplot()绘图:

qplot():最基本的散点图,它默认 geom = "point"

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5xcGxvdChXaW5kLCBUZW1wLCBkYXRhPWFpcnF1YWxpdHkpIn0=
qplot(): 添加颜色,每个月一种颜色
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5haXJxdWFsaXR5JE1vbnRoPC1hcy5mYWN0b3IoYWlycXVhbGl0eSRNb250aClcbnFwbG90KFdpbmQsIFRlbXAsIGRhdGE9YWlycXVhbGl0eSwgY29sb3I9TW9udGgpIn0=
qplot():所有数据点统一为一种颜色
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5xcGxvdChXaW5kLCBUZW1wLCBkYXRhPWFpcnF1YWxpdHksIGNvbG9yPUkoXCJyZWRcIikpIn0=
qplot():改变数据点的形状,每个月份一种形状
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5xcGxvdChXaW5kLCBUZW1wLCBkYXRhPWFpcnF1YWxpdHksIHNoYXBlPWZhY3RvcihNb250aCkpIn0=
qplot():改变数据点的大小,每个月份一种大小
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5xcGxvdChXaW5kLCBUZW1wLCBkYXRhPWFpcnF1YWxpdHksIHNpemU9TW9udGgpIn0=
qplot():统一大小
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5xcGxvdChXaW5kLCBUZW1wLCBkYXRhPWFpcnF1YWxpdHksIHNpemU9SSgzKSkifQ==
在当前的图上按颜色区分月份,并加入平滑曲线
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5haXJxdWFsaXR5JE1vbnRoPC1hcy5mYWN0b3IoYWlycXVhbGl0eSRNb250aClcblxucXBsb3QoV2luZCwgVGVtcCwgZGF0YT1haXJxdWFsaXR5LCBzaXplPUkoMSksIGNvbG9yPU1vbnRoLFxuICAgICAgZ2VvbT1jKFwicG9pbnRcIiwgXCJzbW9vdGhcIikpIn0=
修改坐标轴,添加标题:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmFpcnF1YWxpdHkkTW9udGg8LWFzLmZhY3RvcihhaXJxdWFsaXR5JE1vbnRoKVxuXG5xcGxvdChXaW5kLCBUZW1wLCBkYXRhPWFpcnF1YWxpdHksIHNpemU9SSgxKSwgY29sb3I9TW9udGgsXG4gICAgICBnZW9tPWMoXCJwb2ludFwiLCBcInNtb290aFwiKSxcbiAgICAgIHhsYWI9XCJ3aW5kIChtcGgpXCIsIHlsYWI9XCJUZW1wXCIsXG4gICAgICBtYWluPVwid2luZCB2cy4gdGVtcFwiKSJ9
加入“面”这个参数
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5haXJxdWFsaXR5JE1vbnRoPC1hcy5mYWN0b3IoYWlycXVhbGl0eSRNb250aClcblxucXBsb3QoV2luZCwgVGVtcCwgZGF0YT1haXJxdWFsaXR5LCBzaXplPUkoMSksXG4gICAgICBnZW9tPWMoXCJwb2ludFwiLCBcInNtb290aFwiKSxcbiAgICAgIHhsYWI9XCJ3aW5kIChtcGgpXCIsIHlsYWI9XCJUZW1wXCIsXG4gICAgICBtYWluPVwid2luZCB2cy4gdGVtcFwiLFxuICAgICAgZmFjZXRzID0gTW9udGh+LikifQ==
为风速这一变量绘制密度曲线
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5xcGxvdChXaW5kLCBkYXRhPWFpcnF1YWxpdHksIGdlb209XCJkZW5zaXR5XCIpXG5cbiMgYnkgbW9udGg6XG5xcGxvdChkYXRhPWFpcnF1YWxpdHksIFdpbmQsIGdlb209XCJkZW5zaXR5XCIsXG4gICAgICBjb2xvcj1mYWN0b3IoTW9udGgpKSJ9

ggplot()

为什么要使用ggplot()

ggplot() 的基本概念

aes是aesthetic mapping的缩写,也即“美学映射”。文档里对aes是这么描述的: Generate aesthetic mappings that describe how variables in the data are mapped to visual properties (aesthetics) of geoms.

也就是aes是把数据映射到可见属性的函数,这些属性包括图像的横坐标,纵坐标,颜色,大小等。

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

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

几何对象代表我们在图中实际看到的图形元素,如点、 线、多边形等。

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

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

数据、映射、几何对象、统计变换等构成一个图层。 图层可以允许用户一步步的构建图形,方便单独对图 层进行修改。

常用图形

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5zdHIobXBnKSJ9
底层画布:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmdncGxvdChkYXRhPW1wZywgbWFwcGluZz1hZXMoeD1jdHksIHk9aHd5KSlcblxuIyBFcXVhbCBleHByZXNzaW9uOlxuZ2dwbG90KG1wZywgYWVzKHg9Y3R5LCB5PWh3eSkpIn0=
散点图
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXBnLCBhZXMoeD1jdHksIHk9aHd5KSkgKyBcbiAgZ2VvbV9wb2ludCgpIn0=
  1. 将年份映射到颜色属性
  2. 将底层画布存储成p,方便后面引用
  3. 添加平滑曲线
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKHg9Y3R5LCB5PWh3eSwgY29sb3VyPWZhY3Rvcih5ZWFyKSkpXG5cbnAgKyBnZW9tX3BvaW50KCkrIFxuICBzdGF0X3Ntb290aCgpIn0=

通过改变图形透明度和错位来展示数据密度,重合的点

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKHg9Y3R5LCB5PWh3eSwgY29sb3VyPWZhY3Rvcih5ZWFyKSkpXG5cbnAgKyBnZW9tX3BvaW50KGFscGhhPTAuNCwgcG9zaXRpb24gPSBcImppdHRlclwiKSsgXG4gIHN0YXRfc21vb3RoKCkifQ==
用坐标控制图形显示的范围,相当于局部放大
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKHg9Y3R5LCB5PWh3eSwgY29sb3VyPWZhY3Rvcih5ZWFyKSkpXG5cbnAgKyBnZW9tX3BvaW50KGFscGhhPTAuNCxwb3NpdGlvbiA9IFwiaml0dGVyXCIpKyBcbiAgc3RhdF9zbW9vdGgoKStcbiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDE1LCAyNSkseWxpbT1jKDE1LDQwKSkifQ==
用坐标控制图形显示的范围, 按年份分面板显示,逃离扁平
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKHg9Y3R5LCB5PWh3eSwgY29sb3VyPWZhY3Rvcih5ZWFyKSkpXG5cbnAgKyBnZW9tX3BvaW50KGFscGhhPTAuNCxwb3NpdGlvbiA9IFwiaml0dGVyXCIpKyBcbiAgc3RhdF9zbW9vdGgoKStcbiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDE1LCAyNSkseWxpbT1jKDE1LDQwKSkrXG4gIGZhY2V0X3dyYXAofiB5ZWFyLG5jb2w9MSkifQ==
添加标题,横轴与纵轴,使作图更清晰易懂:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKHg9Y3R5LCB5PWh3eSwgY29sb3VyPWZhY3Rvcih5ZWFyKSkpXG5cbnAgKyBnZW9tX3BvaW50KGFscGhhPTAuNCxwb3NpdGlvbiA9IFwiaml0dGVyXCIpKyBcbiAgc3RhdF9zbW9vdGgoKStcbiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDE1LCAyNSkseWxpbT1jKDE1LDQwKSkrXG4gIGZhY2V0X3dyYXAofiB5ZWFyLG5jb2w9MSkrXG4gIGdndGl0bGUoXCJNaWxlcyBQZXIgR2FsbG9uIG9mIERpZmZlcmVudCBEaXNwbGFjZW1lbnRzXCIpK1xuICB4bGFiKFwibXBnIGluIGNpdHlcIikrXG4gIHlsYWIoXCJtcGcgYXQgaGlnaHdheVwiKSJ9
直方图(连续性变量)
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKGh3eSkpIFxuXG5wICsgZ2VvbV9oaXN0b2dyYW0oKSJ9

改进:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKGh3eSkpIFxuXG5wICsgZ2VvbV9oaXN0b2dyYW0oY29sb3I9XCJibGFja1wiLCBmaWxsPVwicmVkXCIpIn0=
调整直方的宽度为2
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKGh3eSkpIFxuXG5wICsgZ2VvbV9oaXN0b2dyYW0oY29sb3I9XCJibGFja1wiLCBmaWxsPVwicmVkXCIsIGJpbndpZHRoPTIpIn0=

添加平均值的竖线

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5wIDwtIGdncGxvdChtcGcsYWVzKGh3eSkpIFxuXG5wICsgZ2VvbV9oaXN0b2dyYW0oY29sb3I9XCJibGFja1wiLCBmaWxsPVwicmVkXCIsIGJpbndpZHRoPTIpK1xuICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0PW1lYW4oaHd5KSksXG4gICAgICAgICAgICBjb2xvcj1cImJsdWVcIiwgbGluZXR5cGU9XCJkYXNoZWRcIiwgc2l6ZT0xKSJ9
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbnAgPC0gZ2dwbG90KG1wZyxhZXMoaHd5LCBjb2xvcj1mYWN0b3IoeWVhcikpKSBcblxucCArIGdlb21faGlzdG9ncmFtKGJpbndpZHRoPTIpK1xuICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0PW1lYW4oaHd5KSksXG4gICAgICAgICAgICBjb2xvcj1cImJsdWVcIiwgbGluZXR5cGU9XCJkYXNoZWRcIiwgc2l6ZT0xKStcbiAgICB0aGVtZShsZWdlbmQucG9zaXRpb249XCJ0b3BcIikifQ==
条形图 (分类变量)
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmdncGxvdChtcGcsIGFlcyh4PWNsYXNzKSkrXG4gIGdlb21fYmFyKCkifQ==
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmdncGxvdChtcGcsIGFlcyhjbGFzcyxmaWxsPWZhY3Rvcih5ZWFyKSkpKyBcbiAgZ2VvbV9iYXIocG9zaXRpb249J2lkZW50aXR5JyxhbHBoYT0wLjUpIn0=
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmdncGxvdChtcGcsIGFlcyhjbGFzcyxmaWxsPWZhY3Rvcih5ZWFyKSkpKyBcbiAgZ2VvbV9iYXIocG9zaXRpb249J2RvZGdlJykifQ==
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmdncGxvdChtcGcsIGFlcyhjbGFzcyxmaWxsPWZhY3Rvcih5ZWFyKSkpKyBcbiAgZ2VvbV9iYXIocG9zaXRpb249J3N0YWNrJykifQ==
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5cbmdncGxvdChtcGcsIGFlcyhjbGFzcyxmaWxsPWZhY3Rvcih5ZWFyKSkpKyBcbiAgZ2VvbV9iYXIocG9zaXRpb249J2ZpbGwnKSJ9
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXBnLCBhZXMoY2xhc3MsZmlsbD1jbGFzcykpKyBcbiAgZ2VvbV9iYXIoKStcbiAgZmFjZXRfd3JhcCh+eWVhcixuY29sPTEpIn0=
给每一个车型做数量的箱线图
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXBnLCBhZXMoY2xhc3MsaHd5LGZpbGw9Y2xhc3MpKSArXG4gIGdlb21fYm94cGxvdCgpIn0=
饼图
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXBnLCBhZXMoeCA9IGZhY3RvcigxKSwgZmlsbCA9IGZhY3RvcihjbGFzcykpKSArIFxuICBnZW9tX2Jhcih3aWR0aCA9IDEpICsgXG4gIGNvb3JkX3BvbGFyKHRoZXRhID0gXCJ5XCIpIn0=

总结:

ggplot()作图练习

使用R自带数据集 mtcars绘制以下图形:

散点图:x = wt, y = disp
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QoKSIsInNvbHV0aW9uIjoibGlicmFyeShnZ3Bsb3QyKVxuZ2dwbG90KG10Y2FycywgYWVzKHggPSB3dCwgeSA9IGRpc3ApKSArXG4gIGdlb21fcG9pbnQoKSJ9
散点图:x = wt, y = mpg, 用颜色区分不同气缸数量的车
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzKSIsInNvbHV0aW9uIjoibGlicmFyeShnZ3Bsb3QyKVxuZ2dwbG90KG10Y2FycywgYWVzKHggPSB3dCwgeSA9IG1wZywgY29sID0gZmFjdG9yKGN5bCkpKSArXG4gIGdlb21fcG9pbnQoKSJ9
添加平滑曲线
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzKSIsInNvbHV0aW9uIjoibGlicmFyeShnZ3Bsb3QyKVxuZ2dwbG90KG10Y2FycywgYWVzKHggPSB3dCwgeSA9IG1wZykpICtcbiAgZ2VvbV9wb2ludCgpK1xuICBnZW9tX3Ntb290aCgpIn0=
在上图基础上,修改xlab, ylab的名称并添加标题 relationship between weights and mpg petal`:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QoKSIsInNvbHV0aW9uIjoibGlicmFyeShnZ3Bsb3QyKVxuZ2dwbG90KG10Y2FycywgYWVzKHggPSB3dCwgeSA9IG1wZykpICtcbiAgZ2VvbV9wb2ludCgpK1xuICBnZW9tX3Ntb290aCgpK1xuICB4bGFiKFwiY2FyIHdlaWdodHNcIikrXG4gIHlsYWIoXCJtaWxlcyBwZXIgZ2FsbG9uXCIpK1xuICBnZ3RpdGxlKFwicmVsYXRpb25zaGlwIGJldHdlZW4gd2VpZ2h0cyBhbmQgbXBnXCIpIn0=
直方图(频率)mpg:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG4jIiwic29sdXRpb24iOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IG1wZykpICtcbiAgZ2VvbV9oaXN0b2dyYW0oKSJ9
直方图(频率)mpg,改变直方宽度为3:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpIiwic29sdXRpb24iOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IG1wZykpICtcbiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAzKSJ9
直方图(频率)mpg,添加黑色边框,填充绿色, 注意是在geom_histogram里面进行
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjXG5saWJyYXJ5KGdncGxvdDIpIiwic29sdXRpb24iOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IG1wZykpICtcbiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAzLCBjb2xvcj1cImJsYWNrXCIsIGZpbGw9XCJncmVlblwiKSJ9
使用geom_bar()绘制柱状图,调用position的三种不同参数。 绘制每一种气缸数量里手动挡与自动挡(变量 am)的数量的直方图:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG4jIiwic29sdXRpb24iOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IGZhY3RvcihjeWwpLCBmaWxsID0gZmFjdG9yKGFtKSkpK1xuICBnZW9tX2JhcigpIn0=
修改上面的图,从叠加改为并列直方图
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG4jIiwic29sdXRpb24iOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IGZhY3RvcihjeWwpLCBmaWxsID0gZmFjdG9yKGFtKSkpK1xuICBnZW9tX2Jhcihwb3NpdGlvbiA9IFwiZG9kZ2VcIikgIn0=
修改上面的图,从手动挡自动挡的数量,改为二者的比例
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG4jIiwic29sdXRpb24iOiJsaWJyYXJ5KGdncGxvdDIpXG5nZ3Bsb3QobXRjYXJzLCBhZXMoeCA9IGZhY3RvcihjeWwpLCBmaWxsID0gZmFjdG9yKGFtKSkpK1xuICBnZW9tX2Jhcihwb3NpdGlvbj1cImZpbGxcIikifQ==
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KHJlYWR4bClcbnN1cGVyc3RvcmU8LXJlYWQuY3N2KFwiaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vcy81aHpubG96dXl1dmZxMmsvU3VwZXJzdG9yZV9vcmRlcnMuY3N2P2RsPTFcIikifQ==
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KHJlYWR4bClcbnN1cGVyc3RvcmU8LXJlYWRfZXhjZWwoXCJTdXBlcnN0b3JlLnhsc1wiLHNoZWV0PTEpIn0=