ggplot2笔记——初步摸索

ggplot2笔记里面采用的是R里面内置的数据集进行画图的,数据的结构比较简单你,便于理解。笔记参考的图书是《数据分析实战 》by 【美】托马兹·卓巴斯(Tomasz Drabas),书可以从https://b-ok.global/上面直接下载,下载不了的如果想要图书可以留下邮箱。


偶尔喝下鸡汤激励一下自己

第2章 快速探索数据

qplot() 函数

它的语法与基础绘图系统类似,对于每一个由qplot() 函数绘制的图形,技巧中也提供了用更强大的ggplot() 函数来绘图的等价解决方案。


2.1 绘制散点图

那么如何绘制散点图?

使用plot() 函数可绘制散点图,运行命令时依次传递给plot() 函数一个向量x 和一个向量y

plot(mtcars$wt,mtcars$mpg)


R语言里面默认的plot函数画散点图

对于ggplot2系统,可用qplot() 函数得到相同的绘图结果

library(ggplot2)

qplot(mtcars$wt, mtcars$mpg)


ggplot2包里面的qplot函数画散点图

如果绘图所用的两个参数向量包含在同一个数据框内,则可以运行下面的命令

qplot(wt,mpg,data=mtcars)


一个dataframe里面包含有多个向量时的情况,注意坐标轴标签的变化

这与下面等价

ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point()


2.2 绘制折线图

如何绘制折线图?

使用plot() 函数绘制折线图(见图2-3左图)时需向其传递一个包含x 值的向量和一个包含y 值的向量,并使用参数type="l"

plot(pressure$temperature, pressure$pressure, type="l")


plot函数画出来的折线图

如果要向图形中添加数据点或者多条折线,则需先用plot() 函数绘制第一条折线,再通过points() 函数和lines() 函数分别添加数据点和更多折线

plot(pressure$temperature, pressure$pressure, type="l")

points(pressure$temperature,pressure$pressure)

lines(pressure$temperature, pressure$pressure/2, col="red")

points(pressure$temperature, pressure$pressure/2, col="red")


用plot函数绘制多条折线并且在折线上面添加数据点

在ggplot2中,可以使用qplot() 函数并将参数设定为geom="line" 得到类似的绘图结果

library(ggplot2)

qplot(pressure$temperature, pressure$pressure, geom="line")


用ggplot2中的qplot函数绘制折线图

如果函数的两个参数向量已包含在同一个数据框中,则可以运行下面的语句

qplot(temperature,pressure, data=pressure, geom="line")

 这等价于下面的命令

ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line()


用ggplot函数来绘制折线图

添加数据点

qplot(temperature, pressure, data=pressure, geom=c("line", "point"))

这等价于下面的命令

ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() + geom_point()


用geom_point()函数添加数据点



2.3 绘制条形图

如何绘制条形图?

对变量的值绘制条形图,可以使用barplot() 函数,并向其传递两个向量作为参数第一个向量用来设定条形的高度第二个向量用来设定每个条形对应的标签

如果向量中的元素已被命名,则系统会自动使用元素的名字作为条形标签

barplot(BOD$demand, names.arg=BOD$Time)


R中内置的BOD数据集


用barplot()函数画出来的图形(x轴表示的是离散的变量)

有时候,“条形图”表示的是分组数据中各个元素的频数(这一点非常重要,柱子的高度表示的是频数)

这种条形图跟直方图有些类似,不过,其用离散取值的x 轴替代了直方图中连续取值的x 轴。要计算向量中各个类别的频数,可以使用table() 函数

table(mtcars$cyl)

首先在对数据进行处理之前要对自己的数据有充分的认识


R语言里面内置的数据集mtcars

只需将上面的表格结果传递给barplot() 函数即可绘制频数条形图

生成频数表

barplot(table(mtcars$cyl))


用barplot绘制mtcars$cyl的频数表

qplot() 函数也可以用来绘制分组变量的频数条形图,事实上,这是ggplot2绘制条形图的默认方式,它比绘制变量值条形图的命令更简短。再提醒一次,注意连续x 轴和离散x 轴的差异

cyl是连续变量

qplot(mtcars$cyl)


cyl是连续变量时画出来的图形

将cyl转化为因子型变量

qplot(factor(mtcars$cyl))


cyl是因子变量时画出来的图形

如果参数向量包含在同一个数据框内,则可以运行下面的语句

变量值条形图,这里用BOD数据框中的Time列

ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")


采用ggplot函数画出来的barplot

频数条形图

qplot(factor(cyl), data=mtcars)


qplot绘制的频数条形图,纵坐标表示的是横坐标对应的频数

这与下面的语句等价

ggplot(mtcars, aes(x=factor(cyl))) + geom_bar()


2.4 绘制直方图

如何绘制直方图来查看一维数据的分布特征?

可以使用hist() 函数绘制直方图,使用时需向其传递一个向量

hist(mtcars$mpg)


hist绘制的直方图,纵坐标表示的是横坐标的数值代表的频率

通过breaks参数指定大致组距,具体可以查看?hist的帮助文档里面的介绍

hist(mtcars$mpg,breaks=10)


设置了break之后的hist图

对于ggplot2包,可以使用qplot() 函数得到同样的绘图结果

qplot(mtcars$mpg)

如果参数向量在同一个数据框内,则可以使用下面的语句

library(ggplot2)

qplot(mpg, data=mtcars, binwidth=4)


qplot()函数绘制直方图并设置binwidth

这等价于

ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4)


2.5 绘制箱线图

如何绘制箱线图以对不同分布进行比较?

使用plot() 函数绘制箱线图时向其传递两个向量:x 和y 。当x 为因子型变量(与数值型变量对应)时,它会默认绘制箱线图,可以class(ToothGrowth)查看一下ToothGrowth的数据类型。

plot(ToothGrowth$supp, ToothGrowth$len)


ToothGrowth$supp是因子型,ToothGrowth$len是数值型,ToothGrowth$dose是数值型


当数据的类型是因子时plot()函数会直接绘制出来箱线图

当两个参数向量包含在同一个数据框中时,也可以使用公式语法。公式语法允许我们在x 轴上使用变量组合

公式语法

boxplot(len ~ supp, data = ToothGrowth)


用boxplot()函数绘制的箱线图

在x轴上引入两变量的交互

boxplot(len ~ supp + dose, data = ToothGrowth)


两个变量相互的直方图

对于ggplot2包,qplot() 函数可以绘制同样的图形,使用时将参数设定为geom="boxplot" 

library(ggplot2)

qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot")


qplot()函数绘制的boxplot,要设置参数为 geom="boxplot"

当两个参数向量在同一个数据框内时,则可以使用下面的语句

qplot(supp, len, data=ToothGrowth, geom="boxplot")

这等价于

ggplot(ToothGrowth, aes(x=supp,y=len)) + geom_boxplot()


分别用qplot()和ggplot()函数分别绘制boxplot图

使用interaction() 函数将分组变量组合在一起也可以绘制基于多分组变量的箱线图

dose 变量是数值型,因此,我们必须先将其转化为因子型变量,再将其作为分组变量

使用三个独立的向量参数

qplot(interaction(ToothGrowth$supp, ToothGrowth$dose), ToothGrowth$len,geom="boxplot")

也可以以数据框中的列作为参数

qplot(interaction(supp, dose), len, data=ToothGrowth, geom="boxplot")

这等价于

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


interaction函数绘制boxplot

需要注意的是:基础绘图系统绘制的箱线图与ggplot2略有不同。这是因为两者在绘图过程中调用的计算分位数的方法略有差异

运行?geom_boxplot 和?boxplot.base 命令可以得到更多关于两者差异的细节信息

?geom_boxplot

?boxplot.base


2.6 绘制函数图像

如何绘制函数图像?

可以使用curve() 函数绘制函数图像。使用时需向其传递一个关于变量x 的表达式

curve(x^3 - 5*x, from=-4, to=4)


用基础绘图函数 curve ()绘制函数曲线

将参数设置为add=TRUE 可以向已有图形添加函数图像

也可以绘制自己定义的函数图像

myfun <- function

(xvar) {

   1/(1 + exp(-xvar + 10))

}

curve(myfun(x), from=0, to=20)

# 在原来函数的基础上添加红色的曲线

curve(1-myfun(x), add = TRUE, col ="red")


自己定义函数并且画一条曲线,同时使用add=TRUE在原有函数的基础上面添加新的曲线

也可以使用ggplot()函数进行绘制

library(ggplot2)

# 这等价于

ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")


用ggplot()函数绘制自己定义的函数曲线
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • 作者:严涛浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源 ggplot2学习笔记之图...
    wanghaihua888阅读 2,567评论 0 6
  • 写在前面 ggplot2 是一个功能强大且灵活的R包 ,由Hadley Wickham 编写,其用于生成优雅的图...
    Boer223阅读 27,864评论 0 67
  • 作者:黄宝臣 数据科学/科学哲学硕士/本科生物狗知乎原文:https://www.zhihu.com/ques...
    iColors阅读 1,047评论 0 2
  • 简介 文章较长,点击直达我的博客,浏览效果更好。本文内容基本是来源于STHDA,这是一份十分详细的ggplot2使...
    taoyan阅读 50,859评论 7 159
  • 之前学习的绘图方法是基于R的基础绘图系统。在R中一共有四种作图系统,分别为base(之前学的)、grid、latt...
    小贝学生信阅读 1,752评论 0 7