ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图

  • 介绍ggplot2包
  • 使用形状、颜色和尺寸来对多元数据进行可视化
  • 用刻面图比较各组
  • 自定义ggplot2图

19.1 R中的四种图形系统

  • 基础
  • grid
  • lattice
  • ggplot2(用的较多)
    • gghub

需要的R包

  • ggpolt2
  • gridExtra(可以拼图)
  • car

19.2 ggplot2介绍

library(ggplot2)ggplot(data=mtcars, aes(x=wt, y=mpg)) +geom_point() +labs(, x="Weight", y="Miles Per Gallon")
94c299c48fa9e78c2f33b882eb405c88.png
image-20200719172844715

ggplot()初始化图形并且指顶要用到的数据来源(mtcars)和变量(wt\mpg)。aes()函数的功能是指定每个变量扮演的角色(aes代表aesthetics,即如何用视觉形式呈现信息)。

  • 变量wt的值映射到沿x轴的距离,变量mpg的值映射到沿y轴的距离。
  • ggplot()函数设置图形但没有自己的视觉输出。使用一个或多个几何函数向图中添加了几何对象(简写为geom),包括点、线、条、箱线图和阴影区域。
  • geom_point()函数在图形中画点,创建了一个散点图。labs()函数是可选的,可添加注释(包括轴标签和标题)。
library(ggplot2)ggplot(data=mtcars, aes(x=wt, y=mpg)) +geom_point(pch=17, color="blue", size=2) +geom_smooth(method="lm", color="red", linetype=2) +labs(, x="Weight", y="Miles Per Gallon")
4e31f1d2525987144e633085ea8b3171.png
汽车重量与汽油里程的散点图,它们的最佳拟合线及其95%的置信区间
  • 选用geom_point()函数来设置点的形状为三角形(pch=17),点的大小加倍(size=2),并使颜色为蓝色(color="blue")。
  • geom_smooth()函数增加了一条“平滑”曲线。这里需要线性拟合(method="lm"),并且产生一条红色(color="red")虚线(linetype=2),线条尺寸为1(size=1)。
  • 默认情况下,平滑的曲线包括在95%的置信区间(较暗带)内。

ggplot2包提供了分组和小面化的方法,分组是再一个图形中显示两组或多组观察结果,小面化是指再单独并排的图形上显示观察组。ggplot2再定义组和面时使用因子(factor)

示例:

我们可以使用mtcars数据集来查看分组和面。首先,将am、vs和cyl变量转化为因子:

rm(list=ls())mtcars$am labels=c("Automatic", "Manual"))mtcars$vs labels=c("V-Engine", "Straight Engine"))mtcars$cyl #绘图library(ggplot2)ggplot(data=mtcars, aes(x=hp, y=mpg,shape=cyl, color=cyl)) +geom_point(size=3)+facet_grid(am~vs)+labs(,      x="Horsepower", y="Miles Per Gallon")
a2f77a582285ba06f0814d389d5828a9.png

包含变速箱类型(自动对手动)和发动机装置(V型发动机与直列式发动 机)每个组合的分离的散点图。每个点的颜色和形状表示该汽车发动机汽缸的数量。在本例中,am和vs是刻面变量,cyl是分组变量。

19.3 用几何函数指定图的类型

函数添加选项
geom_bar()条形图color、fill、alpha
geom_boxplot()箱线图color、fill、alpha、notch、width
geom_density()密度图color、fill、alpha、linetype
geom_histogram()直方图color、fill、alpha、linetype、binwidth
geom_hline()水平线color、alpha、linetype、size
geom_jitter()抖动点color、size、alpha、shape
geom_line()线图colorvalpha、linetype、size
geom_point()散点图color、alpha、shape、size
geom_rug()地毯图color、side
geom_smooth()拟合曲线method、formula、color、fill、linetype、size
geom_text()文字注解很多,参见函数的“帮助”
geom_violin()小提琴图color、fill、alpha、linetype
geom_vline()垂线color、alpha、linetype、size

书中描述的大多数图形都可以使用表19-2中的几何函数创建

ggplot(singer, aes(x=voice.part, y=height)) + geom_boxplot()
d0b996b25982cb25ff7b28f765269b34.png
选项详述
color对点、线和填充区域的边界进行着色
fill对填充区域着色,如条形和密度区域
alpha颜色的透明度,从0(完全透明)到1(不透明)。
linetype图案的线条(1=实线,2=虚线,3=点,4=点破折号,5=长破折号,6=双破折号)
size点的尺寸和线的宽度
shape点的形状(和pch一样,0=开放的方形,1=开放的圆形,2=开放的三角形,等等)
position绘制诸如条形图和点等对象的位置。对条形图来说,"dodge"将分组条形图并排,"stacked"堆叠分组条形图,"fill"垂直地堆叠分组条形图并规范其高度相等。对于点来说,"jitter"减少点重叠
binwidth直方图的宽度
notch表示方块图是否应为缺口(TRUE/FALSE)
sides地毯图的安置("b"=底部,"l"=左部,"t"=顶部,"r"=右部,"bl"=左下部,等等)
width箱线图的宽度
data(Salaries)#现在R好像内置了这一个数据集library(ggplot2)ggplot(Salaries, aes(x=rank, y=salary)) +geom_boxplot(fill="cornflowerblue",color="black", notch=TRUE)+geom_point(position="jitter", color="blue", alpha=.5)+geom_rug(side="l", color="black")
a21c9fa110744d88fe0a5254bd8ea3be.png

图层的叠加是ggplot2的魅力所在

library(ggplot2)data(singer, package="lattice")ggplot(singer, aes(x=voice.part, y=height)) +geom_violin(fill="lightblue") +geom_boxplot(fill="lightgreen", width=.2)
6c14e929b02f99c98533216c615e281b.png

19.4 分组

为了理解数据,在一个图中画出两个或更多组的观察值通常是很有帮助的。在R中,组通常用分类变量的水平(因子)来定义。

分组是通过ggplot2图将一个或多个带有诸如形状、颜色、填充、尺寸和线类型的视觉特征的分组变量来完成的ggplot()声明中的aes()函数负责分配变量(图形的视觉特征),所以这是一个分配分组变量的自然的地方

以薪水为例子。变量包括变量包括rank(助理教授、副教授、教授)、sex(女性、男性)、yrs.since.phd(获得博士学位年数)、yrs.service(工龄)和salary(以美元计的九个月薪水)。

薪水和学术等级

data(Salaries, package="car")library(ggplot2)ggplot(data=Salaries, aes(x=salary, fill=rank)) +geom_density(alpha=.3)#密度曲线
a5b99d65b5aa033cdc9c8e2f9e16fb00.png

在同一幅图中画出了三条密度曲线(每条曲线代表一个学术等级)并用不同的颜色来区分。填充的设置有些透明度(alpha),

博士学位获得年数和薪水

ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank,shape=sex)) + geom_point()
c4979807912b1edf8b6f60b213b439f8.png

学术等级和性别

ggplot(Salaries, aes(x=rank, fill=sex)) +geom_bar(position="stack") + labs(stack"')ggplot(Salaries, aes(x=rank, fill=sex)) +geom_bar(position="dodge") + labs(dodge"')ggplot(Salaries, aes(x=rank, fill=sex)) +geom_bar(position="fill") + labs(fill"')
ea8fd71a76d3ab14392627645d7be043.png
2ffc0daa68a2c22b20c151a950d569a1.png
49220037adaf6f39d95a9ac8ce109ddd.png

19.5 刻面

如果组在图中并排出现而不是重叠为单一的图形,关系就是清晰的。我们可以使用facet_wrap()函数和facet_grid()函数创建网格图形

语法结果
facet_wrap(~var,ncol=n)将每个var水平排列成n列的独立图
facet_wrap(~var,nrow=n)将每个var水平排列成n行的独立图
facet_grid(rowvar~colvar)rowvar和colvar组合的独立图,其中rowvar表示行,colvar表示列
facet_grid(rowvar~.)每个rowvar水平的独立图,配置成一个单列
facet_grid(.~colvar)每个colvar水平的独立图,配置成一个单行
data(singer, package="lattice")library(ggplot2)ggplot(data=singer, aes(x=height)) +geom_histogram() +facet_wrap(~voice.part, nrow=4)
eccacf597b33c97b6488105696b44f9c.png
刻面图展示了歌手声部高度的分布(直方图)

19.6 添加光滑曲线

可以使用geom_smooth()函数来添加一系列的平滑曲线和和置信区域。

选项描述
method=使用的平滑函数。允许的值包括lm、glm、smooth、rlm和gam,分别对应线性、广义线性、loess、健壮线性和广义相加模型。smooth是默认值
formula=在光滑函数中使用的公式。例子包括y~x(默认)y~log(x),y~poly(x,n)表示n次多项式拟合,y~ns(x,n)表示一个具有n个自由度的样条拟合
se绘制置信区间(TRUE/FALSE)。默认为TRUE
level使用的置信区间水平(默认为95%)
fullrange指定拟合应涵盖全图(TRUE)或仅仅是数据(FALSE)。默认为FALSE

使用Salaries数据集,我们先检验博士毕业年数和薪水之间的关系。在这个例子中,我们可以使用带有95%置信区间的非参数光滑曲线(loess)

data(Salaries, package="car")library(ggplot2)ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) +geom_smooth() + geom_point()
bc5d108a713bf1720b8083a4b7ed104e.png
博士毕业年数与目前薪水之间的关系。加上了一个带有95%置信区间的光滑 曲线
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary,linetype=sex, shape=sex, color=sex)) +geom_smooth(method=lm, formula=y~poly(x,2),se=FALSE, size=1) +geom_point(size=2)

按照性别来拟合一个二次多项式回归(一个弯曲)

bff08ca030165b5b892b403653f1c1eb.png

19.7 修改ggplot2图形的外观

19.7.1 坐标轴

ggplot2包会在创建图时自动创建刻度线、刻度标记标签和坐标轴标签。它们往往看起来不错,但是有时我们需要在更大程度上控制它们的外观。

函数选项
scale_x_continuous()和scale_y_continuous()breaks=指定刻度标记,labels=指定刻度标记标签,limits=控制要展示的值的范围
scale_x_discrete()和scale_y_discrete()breaks=对因子的水平进行放置和排序,labels=指定这些水平的标签,limits=表示哪些水平应该展示
coord_flip()颠倒x轴和y轴
data(Salaries,package="car")library(ggplot2)ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +geom_boxplot() +scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),labels=c("Assistant\nProfessor","Associate\nProfessor","Full\nProfessor")) +scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),labels=c("$50K", "$100K", "$150K", "$200K")) +labs(, x="", y="")
808a9052a13127c33dac997467bf8104.png

19.7.2 图例

有些时候我们需要对图例进行自定义

标题位置theme()中的legend.position"可能的值有"left"、"top"、"right"(默认值)和"bottom",也可以再图中给定的位置指定一个二元素向量

data(Salaries,package="car")library(ggplot2)ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +  geom_boxplot() +  scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),                   labels=c("Assistant\nProfessor",                            "Associate\nProfessor",                            "Full\nProfessor")) +  scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),                     labels=c("$50K", "$100K", "$150K", "$200K")) +  labs(,       x="", y="", fill="Gender") +  theme(legend.position=c(.1,.8))#图例的左上角是分别距离左侧边缘10%和底部边缘80%的部分
a17a2511a7faff5025bfede52414148b.png

19.7.3 标尺

ggplot2包使用标尺把数据空间的观察值映射到可视化的空间中,可以应用于连续的变量以及离散的变量

ggplot(mtcars, aes(x=wt, y=mpg, size=disp)) +geom_point(shape=21, color="black", fill="cornsilk") +labs(x="Weight", y="Miles Per Gallon",, size="Engine\nDisplacement")
e31d88bffce35912d01b7901d2bdd6c3.png

aes()函数的参数size=disp生成连续型变量disp(发动机排量)的标尺,并使用它来控制点的尺寸。结果参见如图所示的气泡图。从该图中可以看出汽车里程随重量和发动机排量的降低而降低。

在这个离散的例子中,可以使用标尺将带有因子水平的视觉线索(如颜色、形状、线条类型、尺寸和透明度)关联起来。

data(Salaries, package="car")ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +scale_color_manual(values=c("orange", "olivedrab", "navy")) +geom_point(size=2)#设定各个组别的颜色
a718a05e341365615ca4e182ffbf685d.png

19.7.4 主题

theme()函数中的选项可以让我们调整字体、背景、颜色和网格线等。主题可以使用一次,也可以保存起来应用到多个图中。

data(Salaries, package="car")library(ggplot2)mytheme axis.title=element_text(face="bold.italic",size=10, color="brown"),axis.text=element_text(face="bold", size=9,color="darkblue"),panel.background=element_rect(fill="white",color="darkblue"),panel.grid.major.y=element_line(color="grey",linetype=1),panel.grid.minor.y=element_line(color="grey",linetype=2),panel.grid.minor.x=element_blank(),legend.position="top")# 设定主题ggplot(Salaries, aes(x=rank, y=salary, fill=sex)) +geom_boxplot() +labs(, x="Rank", y="Salary") +mytheme
7d390511b7ce532d4afde03fc8790063.png

主题mytheme指定了图的标题应该为粗斜体的棕色14号字。轴的标题为粗斜体的棕色10号字。坐标轴标签应为加粗的深蓝色9号字。画图区域有白色的填充和深蓝色的边框。主水平网格应该是灰色的实线,次水平网格应该是灰色的虚线;垂直网格不输出;图例展示在图的顶部。theme()函数给了我们把控最后图形的控制权。可以参考help(theme)来查看更多关于选项的信息。

19.7.5 多重图

我们使用图形参数mfrow和基本函数layout()把两个或更多的基本图放到单个图形中。同样,这种方法在ggplot2包中不适用。将多个ggplot2包的图形放到单个图形中最简单的方式是使用gridExtra包中的grid.arrange()函数。7604aa512cfc7a5e5f727426571f34e1.png

19.8 保存图形

我们可以使用1.3.4节讨论的标准方法来保存由ggplot2创建的图形,但是ggsave()函数能更方便地保存它。它的选项包括保存哪幅图形,保存在哪里和以什么形式保存。

myplot ggsave(file="mygraph.png", plot=myplot, width=5, height=4)

如果忽略plot=选项,最近创建的图形会被保存。

ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()ggsave(file="mygraph.pdf")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7 編譯 chmsee

安装libchm及相关的devel包,安装 xulrunner 及 devel 包!否则后面make的时候会出错! 到解压出来的chmsee/src目录下,找到与你系统对应的Makefile文件,我选的是Makefile.fedora,cp Makefile.fedora Makefile…

python调用cmd命令释放端口_详解python调用cmd命令三种方法

目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情…

LeetCode 1742. 盒子中小球的最大数量

文章目录1. 题目2. 解题1. 题目 你在一家生产小球的玩具厂工作,有 n 个小球,编号从 lowLimit 开始,到 highLimit 结束(包括 lowLimit 和 highLimit ,即 n highLimit - lowLimit 1)。 另有无限数量的盒子…

bash shell命令(1)

本文地址:http://www.cnblogs.com/archimedes/p/bash-shell1.html,转载请注明源地址。 ls命令 ls用来列出目录的内容,它是用户最常用的命令之一,ls命令的格式为: ls[选项][目录名或文件名] 选项的主要参数:…

activiti页面展示流程图乱码_activiti 5.17 流程图中文乱码问题

1. 流程图中任务中的中文乱码显示问题。解决方法:设置processEngineConfiguration中的两个字体属性,例如:。。。2. 流程图中TextAnnotation中的中文乱码显示问题。此乱码产生的原因是,负责画流程图的类DefaultProcessDiagramCanva…

python遍历文件夹下所有文件名中含有指定_Python 遍历目录找出包含指定字符串的文件夹...

题目:编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 题目不难,但是初接触Python,对函数不够熟悉,犯了不少错误。总结如下: os.path.is…

LeetCode 1743. 从相邻元素对还原数组(拓扑排序)

文章目录1. 题目2. 解题1. 题目 存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。 好在你还记得 nums 中的每一对相邻元素。 给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] [ui, v…

BP神经网络算法学习

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个。BP网络能学习和存贮大量的输入-输出模式映射关系&#xff…

phppage类封装分页功能_PHP封装的page分页类定义与用法完整示例

本文实例讲述了PHP封装的page分页类定义与用法。分享给大家供大家参考,具体如下:亲测有效,见下图>1. 测试实例test.phpheader("Content-Type: text/html; charsetutf-8");date_default_timezone_set("Asia/Shanghai")…

ms agent

Microsoft Agent是微软公司于1997年9月发布的一项代理软件开发技术,而后被集成到Internet Explorer 4.0 Plus及更高版本中,目前版本为2.0,支持简体中文。作为一种软件代理工具,Agent以其强大的交互功能、鲜明的人性特点、优美的操…

无向图的深度优先遍历非递归_【数据结构图(一)】什么是图

一、什么是“图”(Graph) 表示“多对多”的关系包含一组顶点:通常用 V (Vertex) 表示顶点集合一组边:通常用 E (Edge) 表示边的集合无向边:(v, w) 有向边:不考虑重边和自回路二、抽象数据类型定义类型名称:图(Graph)数…

LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。 同时给你一个二维数组 queries ,其中 queries[i] [favoriteTypei, favoriteDayi, dailyCapi] 。 你按照如下…

wdcp-apache开启KeepAlive提高响应速度

因为我们的网站,媒体文件,js文件,css文件等都在同一个服务器上,并且,我们网站有非常多的图片,所以当建立好tcp链接之后,不应该马上关闭连接,因为每建立一次连接还要进行dns解析&…

python的指针跟c的区别_ctypes中的LP_x*指针和*p指针有什么区别?(以及与结构的奇怪交互)...

我很难理解Python ctypes中LP_*(例如LP_c_char)和*\u p(例如c_char_p)指针之间的区别。是否有文件区分它们?在我所读到的关于*\p指针的一些信息表明它们更好(以某种未指明的方式),但是当我试图将它们用作结构字段时,我会得到奇怪的行为。例如…

爱斯基摩结构

“爱斯基摩结构”:狗拉雪橇是生活在北极圈的爱斯基摩人最重要的运载工具。怎样才能让狗多拉快跑?爱斯基摩人将狗分成两个层次,前面是一只领狗,后头有N只力狗。他们给领狗制造许多特权:它单独享用食品&#…

如何将网页保存为图片_网页账号密码该如何保存?

我们在使用浏览器浏览一些网页的时候,需要输入我们的账号密码才能登陆,以保证安全。但是有时候浏览网页,不小心关掉了,重新打开时又要重新输入密码,这样会显得很繁琐。那么有什么办法能让网页记住我们的账号密码吗&…

scala学习-类与对象

类  /  对象 【《快学Scala》笔记】 一、类 1、Scala中的类是公有可见性的,且多个类可以包含在同一个源文件中; 1 class Counter{ 2 private var value 0  //类成员变量必须初始化,否则报错 3 4 def increment(){ //类中的…

LeetCode 1745. 回文串分割 IV(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。 当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。 示例 1: 输入&a…

字符指针与字符串变量的转换

VC.NET中的String类是利用Unicode字符集编码来表示文本。Unicode字符集中每个字符(汉字、英文字母)都占2个字节,且其字符串是以2个连续的/0结尾的。 ANSI的ASCII字符集是最常见的字符集,常用于表示txt的文本文件。在ASCII字符集中英文占一个字节&#…

直方图均衡 视觉显著_视觉图像:对比度受限直方图均衡化CLAHE

CLAHE源码解析:ContrastLimitAHE .h:#ifndef _CONTRAST_LIMIT_AHE_H_#define _CONTRAST_LIMIT_AHE_H_#include "stdafx.h"#include using namespace std;class ContrastLimitAHE{public:ContrastLimitAHE();~ContrastLimitAHE();int m_nGridX;…