ggplot绘制时间相关性折线图和面积图(2)

折线图和面积图属于时间相关的周期性图表,既往我们已经介绍了使用ggplot绘制简单折线图的,今天我们继续使用我们的GDP数据来进一步深入绘制折线图,数据来源于网址:
http://www.icane.cn/voice/V-%B4%F3%CE%C020140826.htm
在这里插入图片描述
复制以后对数据进行了简单的整理,我们先导入数据和包
在这里插入图片描述
数据非常简单China代表中国,Jap代表日本,year代表年份
在这里插入图片描述
先把时间变成日期格式

bc$year<-as.Date(bc$year)

假如我们只想绘制我们国家的GDP曲线

ggplot(bc, aes(x =year, y =China) )+
  geom_area(fill="#FF6B5E",alpha=0.75)+ 
  geom_line(color="black",size=0.75)+
  scale_x_date(date_labels = "%Y",date_breaks = "4 year")+
  xlab("Year")+ 
  ylab("gdp")+
  theme( axis.title=element_text(size=10,face="plain",color="black"),
         axis.text = element_text(size=10,face="plain",color="black"))

在这里插入图片描述
我们可以对曲线进一步美化,以颜色的深浅来代表GDP的改变情况
先要把数据转成长格式

bc<-melt(bc,id=c("year"),
         measure.vars = (c("China","Jap")),
         variable.name = "variable",
         value.name = "value") ##ID为固定不变的变量,measure.vars为需要整合的变量

设置曲线插补点

x<-as.numeric(bc$year)
newdata<-data.frame(spline(x,bc$value,n=1000,method= "natural"))##进行平滑处理

重新转成日期数据

newdata$date<-as.Date(newdata$x,origin = "1962-07-01")##设置一个起始时间

最后绘图

ggplot(newdata, aes(x =date, y = y) )+
  geom_bar(aes(fill=y,colour=y),stat = "identity",alpha=1,width = 1)+ 
  geom_line(color="black",size=0.5)+
  scale_color_gradientn(colours=brewer.pal(9,'Reds'),name = "Value")+
  scale_x_date(date_labels = "%Y",date_breaks = "4 year")+
  xlab("Year")+ 
  ylab("Value")+
  guides(fill=FALSE)+
  theme( axis.title=element_text(size=10,face="plain",color="black"),
         axis.text = element_text(size=10,face="plain",color="black"),
         legend.position = c(0.12,0.75),
         legend.background = element_blank())

在这里插入图片描述
我们也可以使用颜色映射方法到面积填充,比较差异
重新导入数据

bc<-read.csv("E:/r/test/gdp.csv",sep=',',header=TRUE)
bc$year<-as.Date(bc$year)
names(bc)
mydata1<-bc

设置最大值和最小值

mydata1$ymin<-apply(mydata1[,c(1,2)], 1, min)
mydata1$ymax<-apply(mydata1[,c(1,2)], 1, max)

作图,先做一张单色的

ggplot(mydata1, aes(x =year))+
  geom_ribbon( aes(ymin=ymin, ymax=ymax),alpha=0.5,fill="white",color=NA)+
  #geom_area(aes(fill=variable),alpha=0.5,position="identity")+ 
  geom_line(aes(y=China,color="#FF6B5E"),size=0.75)+#color="black",
  geom_line(aes(y=Jap,color="#00B2F6"),size=0.75)+#color="black",
  scale_x_date(date_labels = "%Y",date_breaks = "4 year")+
  xlab("Year")+ 
  ylab("gdp")+
  scale_colour_manual(name = "Variable", 
                      labels = c("China", "Jap"),
                      values = c("#FF6B5E", "#00B2F6"))+
  theme( axis.title=element_text(size=10,face="plain",color="black"),
         axis.text = element_text(size=10,face="plain",color="black"),
         legend.position = c(0.15,0.8),
         legend.background = element_blank())

在这里插入图片描述
下面做一张彩色的,因为要进行GDP比较,所以先要设置一下最大最小值

mydata1$ymin1<-mydata1$ymin
mydata1$ymin1[as.integer((mydata1$China-mydata1$Jap)>0)]=NA
mydata1$ymax1<-mydata1$ymax
mydata1$ymax1[as.integer((mydata1$China-mydata1$Jap)>0)==0]=NA
mydata1$ymin2<-mydata1$ymin
mydata1$ymin2[as.integer((mydata1$China-mydata1$Jap)<=0)==0]=NA
mydata1$ymax2<-mydata1$ymax
mydata1$ymax2[as.integer((mydata1$China-mydata1$Jap)<=0)==0]=NA

导入R包ggridges并作图

library(ggridges)
ggplot(mydata1, aes(x=year)) +
  geom_ridgeline_gradient( aes(y=ymin, height = ymax-ymin,  fill = ymax-ymin)) +
  geom_line(aes(y=China),color="black",size=0.75)+#color="black",
  geom_line(aes(y=Jap),color="black",size=0.75)+#color="black",
  scale_fill_gradientn(colours= brewer.pal(9,'RdBu'),name = "Value")+
  theme(legend.position = c(0.15,0.8),
        legend.background = element_blank())

在这里插入图片描述
总的来说ggplot做得是非常漂亮的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值