欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/7/5 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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")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")汽车重量与汽油里程的散点图,它们的最佳拟合线及其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")

包含变速箱类型(自动对手动)和发动机装置(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()选项详述
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")

图层的叠加是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)

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)#密度曲线

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

博士学位获得年数和薪水

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

学术等级和性别

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"')

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)刻面图展示了歌手声部高度的分布(直方图)

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()博士毕业年数与目前薪水之间的关系。加上了一个带有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)

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

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="")

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%的部分

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")

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)#设定各个组别的颜色

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

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

19.7.5 多重图

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

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")

总结

以上是生活随笔为你收集整理的ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。