0

I'm new to R, and I have two plots that look like below, with different, discrete and non-numeric x axis.

Below are the data I'm trying to plot:

Technology      Timescale   Scenario    Contribution            Value
PHS             Short       Pessimistic electricity             164
PHS             Short       Pessimistic facility and materials  303
PHS             Short       Optimistic  electricity             135
PHS             Short       Optimistic  facility and materials  205
ICAES           Short       Pessimistic electricity             164
ICAES           Short       Pessimistic facility and materials  180
ICAES           Short       Optimistic  electricity             144
ICAES           Short       Optimistic  facility and materials  120
P2H2P           Short       Pessimistic electricity             589
P2H2P           Short       Pessimistic facility and materials  83
P2H2P           Short       Optimistic  electricity             321
P2H2P           Short       Optimistic  facility and materials  63
NCA_LTO Battery Short       Pessimistic electricity             144
NCA_LTO Battery Short       Pessimistic facility and materials  385
NCA_LTO Battery Short       Optimistic  electricity             128
NCA_LTO Battery Short       Optimistic  facility and materials  250
PHS             Medium      Pessimistic electricity             164
PHS             Medium      Pessimistic facility and materials  17
PHS             Medium      Optimistic  electricity             135
PHS             Medium      Optimistic  facility and materials  12
ICAES           Medium      Pessimistic electricity             164
ICAES           Medium      Pessimistic facility and materials  9
ICAES           Medium      Optimistic  electricity             144
ICAES           Medium      Optimistic  facility and materials  6
P2H2P           Medium      Pessimistic electricity             589
P2H2P           Medium      Pessimistic facility and materials  23
P2H2P           Medium      Optimistic  electricity             321
P2H2P           Medium      Optimistic  facility and materials  23
NCA_LTO Battery Medium      Pessimistic electricity             144
NCA_LTO Battery Medium      Pessimistic facility and materials  396
NCA_LTO Battery Medium      Optimistic  electricity             128
NCA_LTO Battery Medium      Optimistic  facility and materials  278
PHS             Long        Pessimistic electricity             164
PHS             Long        Pessimistic facility and materials  13
PHS             Long        Optimistic  electricity             135
PHS             Long        Optimistic  facility and materials  9
P2H2P           Long        Pessimistic electricity             657
P2H2P           Long        Pessimistic facility and materials  80
P2H2P           Long        Optimistic  electricity             432
P2H2P           Long        Optimistic  facility and materials  70

Below are my codes:

library("xlsx")
library("ggplot2")
library ("data.table")
library("grid")
library("gtable")
library("gridExtra")

##Empty memory and set working directory
rm(list=ls())
setwd("C:/Users/zhang_x/Documents/R/codes")

##Prepare data for stackbar chart
SmEffLt <- read.xlsx("Visualization.xlsx", sheetIndex=2, startRow=2, header=TRUE, colIndex=NULL,colClasses="character")
SmEffLt$Value <- as.numeric(as.character(SmEffLt$Value))
SmEffLt$Timescale <- factor(SmEffLt$Timescale, levels = c("Short", "Medium", "Long"))
SmEffLt$Technology <- factor(SmEffLt$Technology, levels = c('PHS','ICAES','P2H2P','NCA_LTO Battery'))
SmEffLt$Scenario <- factor(SmEffLt$Scenario, levels = c("Optimistic", "Pessimistic"))
SmEffLt <- data.frame(SmEffLt)

##Prepare data for range bar chart
##Transform Scenrio column into two columns: Pessimistic and Optimistic
##Sum up contribution from electricity and contribution from facility and materials by matching the fields

SmEffLtPessimistic <- subset(SmEffLt,Scenario=="Pessimistic")
SmEffLtPessimistic$Scenario <- NULL
SmEffLtPessimistic <- merge(subset(SmEffLtPessimistic, Contribution=="electricity"),subset(SmEffLtPessimistic, Contribution=="facility and materials"), by=c("Technology","Timescale"))
SmEffLtPessimistic$Contribution.x <- NULL
SmEffLtPessimistic$Contribution.y <- NULL
SmEffLtPessimistic$Value <- SmEffLtPessimistic$Value.x + SmEffLtPessimistic$Value.y
SmEffLtPessimistic$Value.x <- NULL
SmEffLtPessimistic$Value.y <- NULL

SmEffLtOptimistic <- subset(SmEffLt,Scenario=="Optimistic")
SmEffLtOptimistic$Scenario <- NULL
SmEffLtOptimistic <- merge(subset(SmEffLtOptimistic, Contribution=="electricity"),subset(SmEffLtOptimistic, Contribution=="facility and materials"), by=c("Technology","Timescale"))
SmEffLtOptimistic$Contribution.x <- NULL
SmEffLtOptimistic$Contribution.y <- NULL
SmEffLtOptimistic$Value <- SmEffLtOptimistic$Value.x + SmEffLtOptimistic$Value.y
SmEffLtOptimistic$Value.x <- NULL
SmEffLtOptimistic$Value.y <- NULL

SmEffLtRange <- merge(SmEffLtOptimistic, SmEffLtPessimistic, by=c("Technology","Timescale"))

##Plot stackbar chart
p1 <- ggplot(SmEffLt,aes(x=interaction(Scenario, Technology),y=Value, fill=Contribution))+
      geom_bar(stat="identity", colour="white")+
      scale_fill_manual(values=c('gold','cornsilk3'))+
      facet_grid(.~Timescale, scale="free", space = "free")+
      ylab("Life Cycle GHG Emissions (g/kWh)")+
      xlab("")+
      scale_y_continuous(expand = c(0, 0), limits=c(0,800), breaks=seq(0, 800, by=100))+
      theme(axis.text.x=element_text(size=9, angle=90, hjust=1,vjust=0.5),
            axis.text.y=element_text(size=9),
            axis.title.y = element_text(size=8),
            legend.title = element_text(size=9))+
      ggtitle("Variation of Efficiency and Lifetime (1 MW)")+
      theme(plot.title = element_text(size=10, color="#666666", face="bold", hjust=0.5))

##Plot range bar chart
p2 <- ggplot(SmEffLtRange,aes(x=Technology, ymin=Value.x, ymax=Value.y))+
      facet_grid(.~Timescale, scale="free", space = "free")+
      scale_y_continuous(limits=c(0,800), expand = c(0, 0), breaks=seq(0, 800, by=100))+
      geom_errorbar(width=0.3,lwd=0.7)

My questions are:

  1. In plot 1 (p1), how can I have PHS, ICAES, etc.... at the bottom of x axis, and have each two stacked bars sharing one technology?

  2. Do you know how I can overlay them, so that for example, the first line bar in plot 2 (p2) show in between the fist two stacked bars in plot 1?

enter image description here enter image description here

IRTFM
  • 258,963
  • 21
  • 364
  • 487
SHirley
  • 1
  • 1
  • 2
    1. That is not a very easy way to share your data, since there are spaces. Please consider using `dput`. 2. Please provide the plotting code, instead of making us redo your work. See: [How to give a great reproducible example](http://stackoverflow.com/questions/5963269). Thanks! – Axeman Mar 01 '17 at 15:05
  • Thank you for the advice! I'm trying to figure out the dput part, but codes are attached now. – SHirley Mar 01 '17 at 17:23

0 Answers0