暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

R语言绘图 | 多期核密度图绘制

3410
点击关注了解更多哦

1.简介

核密度图常用来反映连续变量数值的密度分布,在论文中核密度图通常以多期(年份)来进行表示,表现变量随时间发展的动态变化过程。因此本文主要以多期核密度为例,利用R语言中的DescTools包与ggplot2包两种方法进行多期核密度图的绘制。如需本文数据可在后台回复【20220101】获得,具体绘图code可参考本文。以下为本文绘制图形展示:

2.演示数据

国家统计局[1]官方网站上关于2017-2020年我国31个省份人均GDP(未包含港澳台数据)为例,利用核密度图来展示我国31个省份人均GDP的密度分布。以下为数据格式,数据以“density.csv”命名,在绘图的过程中首先对数据进行对数化处理,采用对数化之后的数据进行图形绘制。数据可在国家统计局官网自行下载,也可后台回复【20220101】获得。

3.前期数据处理

3.1安装相关包与加载包

#安装package
#install.packages(reshape2)
#install.packages(DescTools)
#install.packages(RColorBrewer)
#install.packages(ggplot2)
#install.packages(ggthemes)
#加载package
library(reshape2)
library(DescTools)
library(RColorBrewer)
library(ggplot2)
library(ggthemes)

3.2加载数据与查看数据

setwd("C:/Users/Acer/Desktop"#设置路径
data <- read.csv("C:/Users/Acer/Desktop/density.csv", header = TRUE)#加载数据
head(data)#查看数据
#      province  y2020  y2019  y2018  y2017
#1       北京市 164889 164563 153095 137596
#2       天津市 101614  90058  85757  79837
#3       河北省  48564  46182  43108  40883

3.3将宽数据转换为长数据

mydata <- melt(data,   #待转换的数据集名称
  id.vars=c("province"),   #要保留的主字段
  variable.name="year",#转换后的分类字段名称(维度)
  value.name="Per.GDP")#转换后的度量值名称
head(mydata) #查看转换后的数据
#      province  year Per.GDP
#1       北京市 y2020  164889
#2       天津市 y2020  101614
#3       河北省 y2020   48564

3.4 将年份变量转换为因子变量,并指定因子水平顺序。

levels(factor(mydata$year)) 
# [1] "y2020" "y2019" "y2018" "y2017"
#将year转换成因子型,同时对标签进行修改
mydata$year <- factor(mydata$year#选定year列
                    levels = c("y2020""y2019""y2018""y2017"), #因子水平
                    labels = c("2020""2019""2018""2017"))#因子标签

3.5 对Per.GDP变量取对数

#对变量Per.GPD进行取对数,并在数据集中生成新的一列,取名为lnPer.GPD
mydata$lnPer.GPD <- log(mydata$Per.GDP)

4.利用DescTools绘制多期核密度

4.1 基础图形

PlotMultiDens(data = mydata, mydata$lnPer.GPD ~ mydata$year)

4.2 对图形的线条类型、填充颜色及坐标轴名称进行调整

# 不含有填充色
PlotMultiDens(data = mydata, mydata$lnPer.GPD ~ mydata$year#设置数据及变量
              col = c('blue''red''green'"black"), #对颜色进行调整
              lty = c(1, 2, 4, 5),lwd=2,#设置线段类型及线段的宽度
              xlab="lnPer.GPD",ylab="Density", main = "lnPer.GPD核密度曲线图")#设置轴标题
# 含有填充色
PlotMultiDens(data = mydata, mydata$lnPer.GPD ~ mydata$year#设置数据及变量
              col = c('blue''red''green'"black"), #对颜色进行调整
              lty = c(1, 2, 4, 5),lwd=2,#设置线段类型及线段的宽度
              fill = SetAlpha(col= c('blue''red''green'"black"), alpha = 0.1),#设置填充色
              xlab="lnPer.GPD",ylab="Density", main = "lnPer.GPD核密度曲线图")#设置轴标题


下面分别为无填充色与有填充色

4.3 也可以利用RColorBrewer包对颜色进行调整。关于RColorBrewer包的使用,可参考R语言绘图|如何调用RColorBrewer包对图形颜色进行修改

PlotMultiDens(data = mydata, mydata$lnPer.GPD ~ mydata$year#设置数据及变量
              col = brewer.pal(4,"Set1"), #对颜色进行调整
              lty = c(1, 2, 4, 5),lwd=2,#设置线段类型
              fill = SetAlpha(col = brewer.pal(4,"Set1"), alpha = 0.3), #设置填充色
              xlab="lnPer.GPD",ylab="Density",main = "lnPer.GPD核密度曲线图"#设置轴标题

5.利用ggplot2绘制多期核密度

ggplot2包中绘制多期核密度的图层函数为geom_density()。首先以单期核密度为例进行展示,因为多期核密度建立在单期的基础上,学会如何调整单期核密度的图形,也就能很好地掌握如何对多期核密度图形进行调整。

5.1 单期:基础绘图函数及图形如下图:

ggplot(mydata, aes(x = lnPer.GPD)) + 
  geom_density()

5.2 对线条的颜色、类型、填充色、主题等进一步调整。调整后的图形如下图:

ggplot(mydata, aes(x = lnPer.GPD)) + #设置x轴为Per.GDP
  geom_density(linetype = 2, color = "black", fill = "lightblue", alpha = 0.8, size  =1.2) + #对线的类型、大小、颜色、填充等进行设置
  labs(x = "lnPer.GDP", y = "density", title = "lnPer.GDP核密度曲线图") + #设置轴标题
  theme(plot.title = element_text(hjust = 0.5)) + #对标题的位置进行调整
  theme_stata() #设置绘图主题

基础图形(左图)与修饰后的图形(右图)

5.3 多期核密度图(含有填充色)

ggplot(mydata, aes(x = lnPer.GPD, color = year, fill = year, linetype = year)) + #设置数据及映射,根据year进行分组
  geom_density(size = 1.1, alpha = 0.1) + #设置线的大小及透明度
  theme_stata() + #设置绘图主题
  scale_color_brewer(palette = "Dark2") + #利用RColorBrewer中的颜色对颜色进行设置
  scale_fill_brewer(palette = "Dark2")  + #利用RColorBrewer中的颜色对填充色进行设置
  labs(x = "lnPer.GPD", y = "density", title = "lnPer.GPD核密度曲线图", caption = "数据来源:国家统计局") + #设置主标题及轴标题等
  theme(plot.title = element_text(hjust = 0.5), #设置标题位置
        legend.position = c(0.85,0.7)) #设置图例位置

5.4 多期核密度图(去掉填充色)

ggplot(mydata, aes(x = lnPer.GPD, color = year, linetype = year)) + 
  geom_density(size = 1.1, alpha = 0.1) + 
  theme_stata() + 
  scale_color_brewer(palette = "Dark2") + 
  labs(x = "lnPer.GPD", y = "density", title = "lnPer.GPD核密度曲线图", caption = "数据来源:国家统计局") + 
  theme(plot.title = element_text(hjust = 0.5), 
        legend.position = c(0.85,0.7)) 

6. 其他

此外,也可以对使用ggplot2绘制的核密度图进行分面操作,具体图层语法可参考R语言绘图|箱线图(多变量、分组、分面),与箱线图进行分面类似。同时,核密度图在也可以在Stata中绘制,下期将更新如何利用Stata进行多期核密度图的绘制。


如有帮助请多多点赞哦!

参考资料

[1]

国家统计局: https://data.stats.gov.cn/index.htm


文章转载自日常分享的小懒猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论