龙空技术网

利用ggplot2制作折线图或者趋势图,反映变化趋势

普癌新声 191

前言:

眼前看官们对“c语言曲线图”大致比较关注,同学们都想要分析一些“c语言曲线图”的相关文章。那么小编同时在网络上汇集了一些关于“c语言曲线图””的相关内容,希望咱们能喜欢,咱们一起来了解一下吧!

折线图常用来显示数据在一个连读的时间跨度上或者一个有序类别上的变化情况,它反映了数据随着时间或有序类别变化的趋势,今天我们一块来学习ggplot2绘制折线图,快点击进来看详情吧!

什么是折线图?

折线图是由许多的资料点用直线连接形成的统计图表,若看多个资料点之间的连线,会是折线。折线图常用于显示数据在一个连续的时间间隔或者时间跨度上或再或者在一个有序类别上的变化,它的特点是反映数据随时间或有序类别而变化的趋势。

折线图用横轴表示时间或者有序类别,用纵轴表示数值,用点来表示各个数据的位置,用线连接各个数据点。

折线图可以反映数据变化的规律,比如数据是逐渐增高还是降低的、增高或者降低的速度如何?是周期的变化还是一过性的变化,变化周期内的峰值是多少?这些数据的特征都可以通过折线图表达或展示出来。

今天我们要绘制的线图就是要展示恶性肿瘤的发病率随年龄变化的趋势,用来展示恶性肿瘤发病率随着年龄变化的一些特征,如恶性肿瘤的高发年龄段是多少?恶性肿瘤的发病率从哪个年龄段开始快速上升的?出现恶性肿瘤发病率峰值的年龄段是多少?

今天我们用到哪些R包?

今天我们主要用来绘图的包还是ggplot2包,用于组合图的R包是cowplot包,用于数据处理的包是dplyr包。

首先,安装这些包

1# 安装ggplot2包2install.packages("ggplot2")3# 安装cowplot包4install.packages("cowplot")5# 安装dplyr包6install.packages("dplyr")

把这些要用到的R包加载到工作环境中

1library(ggplot2)2library(cowplot)3library(dplyr)
1## 2## 载入程辑包:'dplyr'
1## The following objects are masked from 'package:stats':2## 3##     filter, lag
1## The following objects are masked from 'package:base':2## 3##     intersect, setdiff, setequal, union
数据处理

我们把需要用到的数据读取到向量中,我们的数据以csv的格式存放,我们可以基础包的read.csv函数来读取。

1data<-read.csv("age_incidence.csv")

我们再来看看数据结构是什么样的

1head(data)
1##   area  sex variable agegrp2## 1    1 合计    11.48      03## 2    1 合计     9.50      14## 3    1 合计     8.11      55## 4    1 合计     9.78     106## 5    1 合计     9.65     157## 6    1 合计    14.78     20

可以看出读入的数据框里有四个变量,分别为area,sex,variable,agegrp 分别为地区、性别、发病率和年龄组数据,其中area的值为1,2,3分别代表全省合计、城市地区和农村地区,agegrp的值0、1、5、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85分别为年龄组范围。

然后,我们把area和agegrp两个变量都转化为因子,并加上标签,标签的值为最终显示在图上的值。

1data <- data%>%mutate(2  area=factor(area,labels=c("全省合计","城市地区","农村地区")),3  agegrp=factor(agegrp,labels = c("0~","1~","5~","10~","15~","20~","25~","30~","35~","40~","45~","50~","55~","60~","65~","70~","75~","80~","85~")))
利用ggplot2绘图

ggplot2包绘制折线图主要用的是geom_line()函数,我们先来一个示例,先作一个单图,把data数据框里的全省合计数据提取出来制作一个年龄别发病率的折线图。

 1# 利用dplyr包filter函数提取数据 2data%>%filter(area=="全省合计")%>% 3  ggplot(mapping = aes(x=agegrp))+ 4# 利用 geom_line函数添加折线图图层 5  geom_line(mapping=aes(y=variable,group=factor(sex),color=factor(sex)),stat = "identity",size=1.3)+ 6# 利用 annotate语句添加图中注释 7annotate("text", x = 10, y = 3000, label = "全省合计",size=6,fontface="bold")+ 8# 设置x轴标题 9    xlab("年龄组")+10# 设置y轴标题11  ylab("年龄别发病率(1/10万)")+12# 设置y轴起始刻度和终止刻度,以间隔数值13  scale_y_continuous(breaks = c(500,1000,1500, 2000,2500, 3000),limits = c(0,3000))+14# 使用gpplot2经典图样式15theme_classic()+16# 对样式进行个性化调整17  theme(18    # 把x轴标签调整为90度19    axis.text.x = element_text(angle = 90, hjust = 1),20    # 设置图例标题为空21    legend.title=element_blank(),22    # 设置图例的位置在左上角23    legend.position = c(0.15,0.9),24    # 设置图例的文字大小为10号25    legend.text=element_text(size=10),26    # 设置图标题位置和文字大小27    plot.caption = element_text(hjust=0.5, size=15),28    axis.text=element_text(size=10),29    # 设置轴标题文字大小和文字加粗30    axis.title=element_text(size=12,face="bold")31    )->p132# 把作好的图存入向量p1

现在我们来看看存入向量p1的图是什么样的吧!

1p1

在gpplot2语句中加入facet_wrap或者facet_grid语句制作组合图

如果我们想分别展示不同地区的发病率随着年龄的变化趋势,那么我们可以把area这个变量放入facet_wrap函数里以按照area这个变量分组作图,并展示出来。

另外,需要注意的是,用了facet_wrap函数就不用加annotate注释语句了,因为facet_wrap会自动加上。

 1# 这里我们就不用filter函数提取数据了 2data%>% 3  ggplot(mapping = aes(x=agegrp))+ 4  geom_line(mapping=aes(y=variable,group=factor(sex),color=factor(sex)),stat = "identity",size=1.3)+ 5  facet_wrap(~area)+ 6  xlab("年龄组")+ 7  ylab("年龄别发病率(1/10万)")+ 8  scale_y_continuous(breaks = c(500,1000,1500, 2000,2500, 3000),limits = c(0,3000))+ 9theme_classic()+10  theme(axis.text.x = element_text(angle = 90, hjust = 1))+11  theme(legend.title=element_blank(),12        legend.position = c(0.10,0.85),13        legend.text=element_text(size=10),14        plot.caption = element_text(hjust=0.5, size=15),15        strip.text = element_text(size=14,face="bold.italic"),16        strip.background = element_rect(color="white",size=0),17        axis.text=element_text(size=10),18        axis.title=element_text(size=12,face="bold")19        )->p2

现在不同地区的年龄别发病率图已经存入向量p2,现在我们p2展示出来,看看是什么样的?

1p2

但是因为我们已经在前面的语句中已经通过scale_y_continuous语句设置了坐标轴刻度,所以加入scales="free"选项,只会在每个图上再单独显示出来坐标轴,但是刻度范围还是按照scale_y_continuous语句设置的来显示。

我们再来验证一下是不是这样的?

 1data%>% 2  ggplot(mapping = aes(x=agegrp))+ 3  geom_line(mapping=aes(y=variable,group=factor(sex),color=factor(sex)),stat = "identity",size=1.3)+ 4  # 跟前面的程序块里唯一不同的是加入了scales="free"参数 5  facet_wrap(~area,scales="free")+ 6  xlab("年龄组")+ 7  ylab("年龄别发病率(1/10万)")+ 8  scale_y_continuous(breaks = c(500,1000,1500, 2000,2500, 3000),limits = c(0,3000))+ 9theme_classic()+10  theme(axis.text.x = element_text(angle = 90, hjust = 1))+11  theme(legend.title=element_blank(),12        legend.position = c(0.10,0.85),13        legend.text=element_text(size=10),14        plot.caption = element_text(hjust=0.5, size=15),15        strip.text = element_text(size=14,face="bold.italic"),16        strip.background = element_rect(color="white",size=0),17        axis.text=element_text(size=10),18        axis.title=element_text(size=12,face="bold")19        )->p320# 直接显示p3向量21p3
小结

今天我们介绍了折线图的概念,以及如何利用ggplot2包绘制折线图,大家可以根据自己的审美观点修改上面参数和设置,绘制自己的折线图吧。

加公众号,了解最新内容

原文链接:利用ggplot2制作折线图或者趋势图,反映变化趋势_R语言_普癌新声

标签: #c语言曲线图