r - How to overlay multiple layers of data in same plot in ggplot? -


data: data

code:

## load data  ifpricc = read.csv(file = "ifpri_ccagg2050.csv", heade=true)  #----------------------------------------------------------------------- # plotting kernel density distribution final yield impact data #-----------------------------------------------------------------------  ifpricc.df = as.data.frame(ifpricc) ifpricc_mlt.df = melt(ifpricc.df, id.vars=c("crop","codereg","reg","sres","gcm","scen"))  kernel = ggplot(data=subset(ifpricc_mlt.df, reg %in% c("canada","united states","oceania","oecd europe","eastern europe","former ussr") & gcm %in% c("csiro","miroc","nocc")),             aes(x = value, y = ..density..)) kernel = kernel + geom_density(aes(fill = gcm), alpha=.4, subset = .(crop %in% c("whet")),                            position="identity", stat="density", size=0.75,                            bw = "nrd0", adjust = 1.5,                            kernel = c("gaussian")) kernel = kernel + scale_fill_manual(name="gcm model",breaks=c("csiro","miroc","nocc"), values=c("red","blue","gray80")) kernel = kernel + facet_grid(sres ~ reg, scale="free") + scale_y_continuous(breaks=seq(0,2,.25)) kernel = kernel + labs(title="kernel density distribution - , without climate change", y="density", x="yield") + theme_bw() kernel = kernel + theme(plot.title=element_text(face="bold", size=rel(2), hjust=0.5, vjust=1.5, family="serif"),                     axis.text.x=element_text(color="black", size=rel(2), hjust=0.5, family="serif"),                     axis.text.y=element_text(color="black", size=rel(2), hjust=1, family="serif"),                     axis.title.x=element_text(face="bold", color="black", size=rel(1.6), hjust=0.5, vjust=0.2, family="serif"),                     axis.title.y=element_text(face="bold", color="black", size=rel(1.6), hjust=0.5, vjust=0.2, family="serif"),                     strip.text=element_text(face="bold", size=rel(1.5), family="serif"),                     legend.text=element_text(face="bold", size=rel(1.25), family="serif"),                     legend.title=element_text(face="bold", size=rel(1.45), family="serif")) 

results: plot

question:

what trying achieve here plot kernel density curves. problem want overlay baseline kernel curves (in lower facet) on colored ones (two upper facets) , represent deviations baseline. appreciated.

cheers :)

alternative question:

so tinkered bit after looking potential solutions on website, , came this: instead of faceting using facet_grid(sres ~ reg) "sres" x "reg", faceted using facet_wrap(~ reg). produces closer intending alt_plot .

the problem cannot identify distribution "sres", looking for. solve this, thought annotate plot adding vertical lines plot mean of data "sres". kind of @ loss of how move here.

any suggestions?

if understand, think want. need rearrange data: repeat lines in data frame containing nocc factor, once sres = a1b, , once sres = b1. way, nocc density curve appear in a1b facets , in b1 facets.

in addition, melting of data frame has no effect other create column of 1s. also, subsetting outside call ggplot2.

library(ggplot2) ifpricc = read.csv(file = "ifpri_ccagg2050.csv", heade=true)  # subset data frame df = subset(ifpricc,    reg %in% c("canada","united states","oceania","oecd europe","eastern europe","former ussr") &    gcm %in% c("csiro","miroc","nocc") &     crop %in% c("whet"))  # manipulate data frame x = df[df$sres == "pm", ] x = rbind(x, x) x$sres = rep(c("a1b", "b1"), each = dim(x)[1]/2) df = df[df$sres != "pm",] df = rbind(df, x)  # draw plot ggplot(data=df, aes(x = yield, fill = gcm)) +    geom_density(alpha=.4, size=0.75, adjust = 1.5) +    scale_fill_manual(name="gcm model",breaks=c("csiro","miroc","nocc"),      values=c("red","blue","gray80")) +   facet_grid(sres ~ reg, scale="free") + scale_y_continuous(breaks=seq(0,2,.25)) 

enter image description here

edit: facet_wrap version: idea draw 2 charts: 1 a1b, , second b1; put 2 charts using functions gridextra package. give legend each chart. better 1 legend. therefore, draw 1 of charts legend can extracted. draw 2 charts without legends, , put 2 charts , legend together.

library(ggplot) library(gridextra) library(gtable) ifpricc = read.csv(file = "ifpri_ccagg2050.csv", heade=true)  # subset data frame df = subset(ifpricc,     reg %in% c("canada","united states","oceania","oecd europe","eastern europe","former ussr") &     gcm %in% c("csiro","miroc","nocc") &      crop %in%  c("whet"))  # draw first chart p1 = ggplot(data=df[df$sres != "b1", ], aes(x = yield, fill = gcm)) +     geom_density(alpha=.4, size=0.75, adjust = 1.5) +     ggtitle("sres = a1b") +    scale_fill_manual(name="gcm model",breaks=c("csiro","miroc","nocc"),     values=c("red","blue","gray80")) +    facet_wrap( ~ reg, scales = "free_x") + scale_y_continuous(breaks=seq(0,2,.25))  # extract legend legend = gtable_filter(ggplot_gtable(ggplot_build(p1)), "guide-box")  # redraw first chart without legend p1 = p1 + guides(fill = false)  # draw second chart without legend p2 = ggplot(data=df[df$sres != "a1b", ], aes(x = yield, fill = gcm)) +     geom_density(alpha=.4, size=0.75, adjust = 1.5) +     ggtitle("sres = b1") +     scale_fill_manual(name="gcm model",breaks=c("csiro","miroc","nocc"),     values=c("red","blue","gray80"), guide = "none") +    facet_wrap( ~ reg, scales = "free_x") + scale_y_continuous(breaks=seq(0,2,.25))  # combine 2 charts , legend (and main title) grid.arrange(arrangegrob(p1, p2, ncol = 1),      legend, widths = unit.c(unit(1, "npc") - legend$width, legend$width), nrow = 1,    main = textgrob("kernel density distribution - , without climate change",     vjust = 1,  gp = gpar(fontface = "bold"))) 

enter image description here


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -