R语言中ggplot2绘制双坐标轴图_第1页
R语言中ggplot2绘制双坐标轴图_第2页
R语言中ggplot2绘制双坐标轴图_第3页
R语言中ggplot2绘制双坐标轴图_第4页
R语言中ggplot2绘制双坐标轴图_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第R语言中ggplot2绘制双坐标轴图R包ggplot2绘图精美,可以做出很复杂的图形,深受用户喜爱。它的作者hadley并不推荐使用ggplot2绘制双坐标轴图,认为这样会增加读图的难度,但是目前需要双坐标轴图应用的场景还是很多,如下图形直方图和曲线分别有不同的坐标轴,表示不同的意思,图片展示内容比较丰富

今天我们通过我们的汽车销售数据(公众号回复:汽车销售,可以获得数据)来演示一下ggplot2绘制双坐标轴图,主要是通过sec.axis函数进行转换,进行第二个坐标轴的转换。我们先来导入数据

library(foreign)

library(ggplot2)

library(plyr)

bc-read.spss("E:/r/test/tree_car.sav",

use.value.labels=F,to.data.frame=T)

我们来看下数据,car就是汽车售价,age是年龄,gender是性别,inccat是收入,这里分成4个等级,ed是教育程度。

我们用这个数据生成两个子数据,展示不同教育程度人群购车的区别,继续使用原来的summarySE函数生成数据,想了解这个函数的看《R语言绘制带误差和可信区间的折线图》这篇文章,主要是利用这个函数生成不同类型的数据分析指标,函数的代码如下:

summarySE-function(data=NULL,measurevar,groupvars=NULL,na.rm=FALSE,

erval=.95,.drop=TRUE){

library(plyr)

#NewversionoflengthwhichcanhandleNA's:ifna.rm==T,don'tcountthem

length2-function(x,na.rm=FALSE){

if(na.rm)sum(!is.na(x))

elselength(x)

#Thisdoesthesummary.Foreachgroup'sdataframe,returnavectorwith

#N,mean,andsd

datac-ddply(data,groupvars,.drop=.drop,

.fun=function(xx,col){

c(N=length2(xx[[col]],na.rm=na.rm),

mean=mean(xx[[col]],na.rm=na.rm),

sd=sd(xx[[col]],na.rm=na.rm)

measurevar

#Renamethe"mean"column

datac-rename(datac,c("mean"=measurevar))

datac$se-datac$sd/sqrt(datac$N)#Calculatestandarderrorofthemean

#Confidenceintervalmultiplierforstandarderror

#Calculatet-statisticforconfidenceinterval:

#e.g.,ifervalis.95,use.975(above/below),andusedf=N-1

ciMult-qt(erval/2+.5,datac$N-1)

datac$ci-datac$se*ciMult

return(datac)

这个函数并不是今天的主要内容,主要是看我们生成的数据

carss-summarySE(bc,measurevar="car",groupvars=c("gender","ed"))

carss1-summarySE(bc,measurevar="car",groupvars=c("inccat","ed"))

我们来看看生成的两个数据

Carss

carss1

carss1和carss都有ed这个数据,carss1的数据比carss多,carss1有inccat这个指标carss没有

我们先画一个carss数据的教育和汽车售价的直方图

ggplot()+

geom_col(data=carss,aes(x=ed,y=car),fill="#6794a7")

上图展示了不同教育程度买车的情况,假设我们想把carss1这个数据的inccat和ci这个指标映射进上图中(不管临床意义,只是展示数据映射),我们可以看到ci这个指标很小0-5这样,而汽车这个指标的范围是0-80,不能通过同一坐标轴展示,所以只能通过分轴展示。主要是通过rescale函数先把ci这个指标在在0-80区间进行标准化转换,然后在投射于右坐标轴。

先把inccat转换成因子

carss1$inccat-as.factor(carss1$inccat)

绘图

ggplot()+

geom_col(data=carss,aes(x=ed,y=car),fill="#6794a7")+

geom_line(data=carss1,aes(x=ed,y=rescale(ci,c(0,80)),colour=inccat,group=inccat),size=1.5)+

geom_point(data=carss1,aes(x=ed,y=rescale(ci,c(0,80))),shape=21,fill="white",size=4)+

scale_y_continuous(breaks=pretty_breaks(4),

sec.axis=sec_axis(~rescale(.,c(0,5)),name="ci",labels=sprintf('%.5f',(0:5))))

图形左轴表示直方图中购车情况,右轴表示不同收入人群的ci情况,把图形进一步美化一下

ggplot()+

geom_col(data=carss,aes(x=ed,y=car),fill="#6794a7")+

geom_line(data=carss1,aes(x=ed,y=rescale(ci,c(0,80)),colour=inccat,group=inccat),size=1.5)+

geom_point(data=carss1,aes(x=ed,y=rescale(ci,c(0,80))),shape=21,fill="white",size=4)+

scale_y_continuous(breaks=pretty_breaks(4),

sec.axis=sec_axis(~rescale(.,c(0,5)),name="ci",labels=sprintf('%.5f',(0:5))))+

labs(title="ThisisaTitle!",subtitle="ThisisaSubtitle",caption="ThisisaCaption")+

theme_minimal(base_size=16)%+r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论