将堆积条和线组合到具有分类变量的同一图形中

时间:2016-10-02 10:14:26

标签: r plot ggplot2 lattice

我有以下数据框:

library(rsdmx)
library(dplyr)
library(countrycode)

dt<-as.data.frame(readSDMX("http://widukind-api.cepremap.org/api/v1/sdmx/IMF/data/IFS/..Q.BFPA-BP6-USD"))
AP<-rename(dt, Country=WIDUKIND_NAME, Year=TIME_PERIOD,A.PI.T=OBS_VALUE)     
AP<-AP[c("Country","REF-AREA","Year","A.PI.T")]
AP$Country<-countrycode(AP$`REF-AREA`, "imf","iso3c")
AP$A.PI.T<-as.numeric((as.character(AP$A.PI.T)))
AP$Country[which(AP$`REF-AREA` == 163)] <- "EURO"
AP$Country[which(AP$`REF-AREA` == 967)] <- "RKS"
AP$Country[which(AP$`REF-AREA` == 355)] <- "CUW+SMX"
AP$Country<-as.factor(AP$Country)
AP$v1<-AP$A.PI.T/2
AP$v2<-AP$v1

str(AP)

'data.frame':   11452 obs. of  6 variables:
 $ Country : Factor w/ 142 levels "ABW","AFG","ALB",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ REF-AREA: Factor w/ 142 levels "512","299","258",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Year    : chr  "2008-Q2" "2008-Q3" "2008-Q4" "2009-Q1" ...
 $ A.PI.T  : num  -113146 -321591 -1000741 16685590 540591 ...
 $ v1      : num  -56573 -160796 -500370 8342795 270295 ...
 $ v2      : num  -56573 -160796 -500370 8342795 270295 ...

如你所见,我有三个数值变量,另一个变量Year应该捕获日期。与此同时,有一个分类变量Country

我的范围是在Country中为每个类别创建图表。

我想要的图表类型是叠加条形图和线条类型图表的混合,我希望有一个选项来预先指定日期范围,例如我希望从2012年第一季度到2015年第三季度。为了让您更好地了解图表的外观,我在Excel中为Euro中的Country

做了一个示例

enter image description here

在理想情况下,我想将Country中为每个级别创建的所有图表导出为非R用户可以使用和浏览的便捷形式。

1 个答案:

答案 0 :(得分:0)

您想要以下内容(仅适用于EURO和UKR):

library(reshape2)
df <- melt(AP, id=1:3)
library(ggplot2)
ggplot(df[df$Country %in% c('EURO', 'UKR'),], aes(Year, value, fill=variable)) + 
   geom_bar(stat='identity') +
   theme(axis.text.x = element_text(angle=90, vjust = 0.5)) + 
   facet_wrap(~Country, scales='free')

enter image description here