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,一经查实,立即删除!

相关文章

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[选项][目录名或文件名] 选项的主要参数:…

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

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

BP神经网络算法学习

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

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

一、什么是“图”(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解析&…

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

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

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…

5000并发的qps是多少_高并发架构设计

点击蓝字,关注我们01概述高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发一方面可以提高资源利用率,加快系统响应速度,但是同…

TensorFlow 2.0 - tf.data.Dataset 数据预处理 猫狗分类

文章目录1 tf.data.Dataset.from_tensor_slices() 数据集建立2. Dataset.map(f) 数据集预处理3. Dataset.prefetch() 并行处理4. for 循环获取数据5. 例子: 猫狗分类学习于:简单粗暴 TensorFlow 2 1 tf.data.Dataset.from_tensor_slices() 数据集建立 tf.data.Dat…

flutter 图解_【Flutter 专题】83 图解自定义 ACEWave 波浪 Widget (一)

和尚今天尝试一下绘制波浪的效果,虽然 pub 仓库中已经有成熟的插件,但和尚还是准备用之前学习的 Canvas 和 Animation 尝试自定义一个 ACEWave;1. 绘制曲线绘制波浪首先需要绘制曲线,采用 Canvas 绘制贝塞尔曲线;常用的…

c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了

小Hub领读:本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。包括冒泡排序、快速排序、插入排序、希尔排序等等,文章讲解非常详细!作者:静默虚空https://juejin.im/post/5cb6b8f551882532c334bcf2本文已归档到&#xf…

LintCode 1816. 使结果不超过阈值的最小除数(二分查找)

文章目录1. 题目2. 解题1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个…

马里兰大学calce电池循环测试数据集_千次循环,全程1.5V恒压,紫米新一代充电锂电池套装上手体验...

电池应该是每个家庭都会用到的东西,在现在智能家电飞迅发展的当下更是如此,比如智能门锁、智能门铃,都需要电池的供电,才能正常使用。而普通碱电池在电量耗尽后就无法循环使用,所以为了能节省成本减少电池对环境的污染…

TensorFlow 2.0 - TFRecord存储数据集、@tf.function图执行模式、tf.TensorArray、tf.config分配GPU

文章目录1. TFRecord 格式存储2. tf.function 高性能3. tf.TensorArray 支持计算图特性4. tf.config 分配GPU学习于:简单粗暴 TensorFlow 2 1. TFRecord 格式存储 使用该种格式,更高效地进行大规模的模型训练 import random import os import tensorfl…

c++ qt qlistwidget清空_Qt编写控件属性设计器12-用户属性

一、前言用户属性是后面新增加的一个功能,自定义控件如果采用的Q_PROPERTY修饰的属性,会自动识别到属性栏中,这个一般称为控件属性,在组态设计软件中,光有控件本身的控件属性还是不够的,毕竟这些属性仅仅是…

TensorFlow 2.0 - tf.saved_model.save 模型导出

文章目录1. tf.saved_model.save2. Keras API 模型导出学习于:简单粗暴 TensorFlow 2 1. tf.saved_model.save tf.train.Checkpoint 可以保存和恢复模型中参数的权值导出模型:包含参数的权值,计算图 无须源码即可再次运行模型,适…

机器人动力学与控制_力控制与位置控制的区别

1.背景介绍目前已经广泛落地的力控制方案是在机械臂末端安装多轴力矩传感器,用以检测机械臂对外界环境施加的力反馈值,并配合适当的控制策略,已达到控制机械臂与环境的作用力。这篇文章所要探讨的力控制(上述力控制方案&#xff0…