ggplot2高效实用指南
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ggplot2高效实用指南相关的知识,希望对你有一定的参考价值。
参考技术A 文章较长,点击直达我的 博客 ,浏览效果更好。
本文内容基本是来源于 STHDA ,这是一份十分详细的 ggplot2 使用指南,因此我将其翻译成中文,一是有助于我自己学习理解,另外其他R语言爱好者或者可视化爱好者可以用来学习。翻译过程肯定不能十全十美,各位读者有建议或改进的话,十分欢迎发 Email ( tyan@zju.edu.cn )给我。
ggplot2 是由 Hadley Wickham 创建的一个十分强大的可视化R包。按照 ggplot2 的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象):
在 ggplot2 中有两个主要绘图函数:qplot()以及ggplot()。
由 ggplot2 绘制出来的ggplot图可以作为一个变量,然后由print()显示出来。
根据数据集, ggplot2 提供不同的方法绘制图形,主要是为下面几类数据类型提供绘图方法:
安装 ggplot2 提供三种方式:
加载
本文将使用数据集 mtcars 。
qplot()类似于R基本绘图函数plot(),可以快速绘制常见的几种图形:散点图、箱线图、小提琴图、直方图以及密度曲线图。其绘图格式为:
其中:
也可以添加平滑曲线
还有其他参数可以修改,比如点的形状、大小、颜色等
箱线图
小提琴图
点图
直方图
密度图
上文中的qplot()绘制散点图:
在ggplot()中完全可以如下实现:
改变点形状、大小、颜色等属性
绘图过程中常常要用到转换(transformation),这时添加图层的另一个方法是用stat_*()函数。
下例中的geom_density()与stat_density()是等价的
等价于
使用数据集wdata,先计算出不同性别的体重平均值
先绘制一个图层a,后面逐步添加图层
可能添加的图层有:
改变颜色
可以通过修改不同属性如透明度、填充颜色、大小、线型等自定义图形:
使用以下函数:
根据sex修改颜色,将sex映射给line颜色
修改填充颜色以及透明度
添加均值线以及手动修改颜色
将sex映射给颜色
手动修改颜色
y轴显示为密度
修改颜色以及线型
将sex映射给线颜色
修改填充颜色
使用数据集mtcars, 先创建一个ggplot图层
可能添加的图层有:
将变量cyl映射给点的颜色和形状
自定义颜色
可以添加回归曲线
散点图+回归线
使用loess方法
将变量映射给颜色和形状
使用数据集 faithful
实际上 geom_jitter() 是 geom_point(position="jitter") 的简称,下面使用数据集 mpg
增加抖动防止重叠
其中两个参数:
参数label用来指定注释标签
使用数据集 diamonds
创建ggplot图层,后面再逐步添加图层
可添加的图层有:
geom_bin2d() 将点的数量用矩形封装起来,通过颜色深浅来反映点密度
设置bin的数量
geom_hex()依赖于另一个R包 hexbin ,所以没安装的先安装:
修改bin的数目
主要是如何通过线来连接两个变量,使用数据集 economics 。
先创建一个ggplot图层,后面逐步添加图层
可添加的图层有:
使用数据集 ToothGrowth ,其中的变量len(Tooth length)是连续变量,dose是离散变量。
创建图层
可添加的图层有:
添加有缺口的箱线图
按dose分组映射给颜色
将dose映射给填充颜色
按supp进行分类并映射给填充颜色
添加中值点
与箱线图结合
将dose映射给颜色进行分组
添加中值点
[读书笔记]机器学习:实用案例解析
第2章 数据分析
#machine learing for heckers
#chapter 2
library(ggplot2) heights.weights <- read.csv("ML_for_Hackers/02-Exploration/data/01_heights_weights_genders.csv", header = TRUE, sep = ",")
#不同区间宽度的直方图
ggplot(heights.weights, aes(x = Height)) + geom_histogram(binwidth = 1) ggplot(heights.weights, aes(x = Height)) + geom_histogram(binwidth = 5) ggplot(heights.weights, aes(x = Height)) + geom_histogram(binwidth = 0.001)
#密度曲线图
ggplot(heights.weights, aes(x = Height)) + geom_density()
#峰值处平坦,考虑图像有结构缺失,根据性别分别绘制密度曲线图
ggplot(heights.weights, aes(x = Height, fill = Gender)) + geom_density() ggplot(heights.weights, aes(x = Weight, fill = Gender)) + geom_density() ggplot(heights.weights, aes(x = Weight, fill = Gender)) + geom_density() + facet_grid(Gender ~ .)
#正态分布:钟形的窄尾分布,单峰对称
#柯西分布:钟形的重尾分布,单峰对称
set.seed(1) normal.values <- rnorm(250, 0, 1) cauchy.values <- rcauchy(250, 0, 1) ggplot(data.frame(X = normal.values), aes(x = X)) + geom_density() ggplot(data.frame(X = cauchy.values), aes(x = X)) + geom_density()
#gamma分布
#gamma分布只有正值
gamma.values <- rgamma(100000, 1, 0.001) ggplot(data.frame(X = gamma.values), aes(x = X)) + geom_density()
#从身高体重预测性别(分类器)
#书中代码画图命令有"stat_abline"完成添加直线操作,而package: ggplot2(version 2.1.0)中"stat"族函数已经没有"abline",只能用"geom"族完成
heights.weights <- transform(heights.weights, Male = ifelse(Gender == \'Male\', 1, 0)) logit.model <- glm(Male ~ Weight + Height, data = heights.weights, family = binomial(link = \'logit\')) ggplot(heights.weights, aes(x = Height, y = Weight, color = Gender)) + geom_point() + geom_abline(intercept = -coef(logit.model)[1]/coef(logit.model)[2], slope = -coef(logit.model)[3]/coef(logit.model)[2], color = \'black\')
以上是关于ggplot2高效实用指南的主要内容,如果未能解决你的问题,请参考以下文章
ggplot2:如何在 geom_text 标签中将字符变量(例如 x <- “.35”)解析为字符,而不是数字