ggplot2线形图进阶画法

这篇文章我们来介绍线形图的进阶画法,如何画出适合数据的线形图。
首先导入必要的包

library (ggplot2)
library(cowplot)#将图片组合在一起
library(gcookbook)#数据集
library(plyr)#后面用到ddply函数

首先我们BOD数据集为例画出最基础的线形图


> BOD
  Time demand
1    1    8.3
2    2   10.3
3    3   19.0
4    4   16.0
5    5   15.6
6    7   19.8

注意看这里Time并不是连续的,当Time=6时没有值

p1 <- ggplot(BOD,aes(x=Time,y=demand))+
  geom_line()
p1

在这里插入图片描述
这里虽然Time=6时没有值,但是在横坐标上还是出现6,那么我们如何操作才能让横坐标显示的不是连续型而是离散的1 2 3 4 5 7 呢

p2 <- ggplot(BOD,aes(x=factor(Time),y=demand,group=1))+#只有1个group
  geom_line()
p2

这里需要加上group=1,告诉ggplot你的分组映射情况

在这里插入图片描述

如何自定义x轴y轴的范围?

利用函数xlim()、ylim(),下面以y轴范围为例介绍其用法

#自定义图像中y轴的范围
p3 <- p2 + ylim(0,max(BOD$demand))
p3

在这里插入图片描述

在线形图上加上点方便查看各个点的取值

p4 <- p1 + geom_point()
p4

在这里插入图片描述

其实这样我们也可以清晰的看出来,在Time=6时是没有值的

如果数据里有两个影响因子,需要我们做对比,这时该怎么画呢?

#以ToothGrowth为例
ToothGrowth
tg <- ddply(ToothGrowth,c("supp","dose"),summarise,m=mean(len))

> tg
  supp dose     m
1   OJ  0.5 13.23
2   OJ  1.0 22.70
3   OJ  2.0 26.06
4   VC  0.5  7.98
5   VC  1.0 16.77
6   VC  2.0 26.14
p5 <- ggplot(tg,aes(x=dose,y=m,colour=supp))+
  geom_line(size=.8)
p5
p6 <- ggplot(tg,aes(x=dose,y=m,linetype=supp))+
  geom_line(size=.8)
p6

在这里插入图片描述

p5是以supp为类别分别用不同颜色表示
p6是以supp为类别分别用不同线型表示

这里同样有一个问题,对于横坐标dose我们的数据只有0.5 1.0 2.0,但是我们的图片显示的是连续型的,那么如何使横坐标只展示dose的值呢?

p7 <- ggplot(tg,aes(x=factor(dose),y=m,colour=supp,group=supp))+#以supp为group
  geom_line(size=.8)
p7

注意这里同p2一样,也需要告诉ggplot你的分组情况,如果不加group=supp会出现空图

在这里插入图片描述

加上点

#加上点
p8 <- ggplot(tg,aes(x=dose,y=m,shape=supp,colour=supp))+#注意关于点的映射关系需要在aes()标清
  geom_line(size=.8)+
  geom_point(size=4)
p8
#等价写法,说白了就是两个图层分开画
ggplot(tg)+
  geom_line(aes(x=dose,y=m,colour=supp),size=.8)+
  geom_point(aes(x=dose,y=m,shape=supp,colour=supp),size=4)

在这里插入图片描述

如何修改线型?

首先我们必须了解有什么线型

library(ggpubr)
show_line_types()

在这里插入图片描述
下面我以solid,dashed,dotted为例展示如何修改线型

#修改线型
p9.1 <- ggplot(BOD,aes(x=Time,y=demand))+
  geom_line(linetype="solid",size=1,colour="blue")+
  ggtitle("linetype='soild'")#标题
p9.2 <- ggplot(BOD,aes(x=Time,y=demand))+
  geom_line(linetype="dashed",size=1,colour="blue")+
  ggtitle("linetype='dashed'")
p9.3 <- ggplot(BOD,aes(x=Time,y=demand))+
  geom_line(linetype="dotted",size=1,colour="blue")+
  ggtitle("linetype='dotted'")
cowplot::plot_grid(p9.1,p9.2,p9.3,nrow = 1)

修改线型只需在geom_line()中添加语句linetype="?"即可

在这里插入图片描述

修改点的类型

首先看一下有什么类型的点

library(ggpubr)
show_point_shapes()

在这里插入图片描述

#修改点的类型
p10 <- ggplot(BOD,aes(x=Time,y=demand))+
  geom_line()+
  geom_point(size=4,shape=21,colour="red",fill="pink")
p10

在这里插入图片描述

如何将线以下部分画成阴影

#将线以下区域绘制成阴影
p11 <- ggplot(BOD,aes(x=Time,y=demand))+
  geom_area(colour="black",#边框颜色
            fill="blue",#填充颜色
            alpha=.5)#透明度
p11

在这里插入图片描述
这样看感觉有点画出阴影部分并不实用,我们换一个数据集来感受以下这样画的美感

sun <- data.frame(
  year = as.numeric(time(sunspot.year)),
  Sunspots = as.numeric(sunspot.year)
)
p12 <- ggplot(sun,aes(x=year,y=Sunspots))+
  geom_area(fill="blue",alpha=.5)
p12

在这里插入图片描述

当数据中有多个类别时我们可以考虑画堆叠柱状图

以uspopage数据集为例

> uspopage
    Year AgeGroup Thousands
1   1900       <5      9181
2   1900     5-14     16966
3   1900    15-24     14951
4   1900    25-34     12161
5   1900    35-44      9273
6   1900    45-54      6437
7   1900    55-64      4026
8   1900      >64      3099
9   1901       <5      9336
10  1901     5-14     17158
p13 <- ggplot(uspopage,aes(x=Year,y=Thousands,fill=AgeGroup))+
  geom_area()+
  geom_line(position = "stack")+#加线
  scale_fill_brewer(palette = "Blues")#调色板
p13

在这里插入图片描述

如何手动添加置信区间

置信区间形如(x0-e,x0+e),因此我们需要先将e计算出来
,以climate数据集中的Berkeley为例展示一下如何画出置信区间

climate
#可以看出数据中存在NA列和不同城市的信息,我们可以利用subset()先筛选一下
Berkeley <- subset(climate,#数据
                   Source=="Berkeley",#筛选Source为Berkeley的行
                   select = c("Source","Year","Anomaly10y","Unc10y"))#仅展示这四列
p14 <- ggplot(Berkeley,aes(x=Year,y=Anomaly10y))+
  geom_line()+
  geom_ribbon(aes(ymin=Anomaly10y-Unc10y,ymax=Anomaly10y+Unc10y),alpha=0.2)+#画出置信区间阴影部分
  geom_line(aes(y=Anomaly10y-Unc10y),colour = "black",linetype = "dashed")+#画出质心区间下边界
  geom_line(aes(y=Anomaly10y+Unc10y),colour = "black",linetype = "dashed")#画出质心区间上边界
p14

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值