2016-05-23 11 views
1
df2 
      Year variable  value pos 
1 2001-04-01 Purchase 4471.05 TRUE 
2 2002-04-01 Purchase 5084.00 TRUE 
3 2003-04-01 Purchase  0.00 TRUE 
4 2004-04-01 Purchase  0.00 TRUE 
5 2005-04-01 Purchase  0.00 TRUE 
6 2006-04-01 Purchase 740.00 TRUE 
7 2007-04-01 Purchase 720.00 TRUE 
8 2008-04-01 Purchase 13510.00 TRUE 
9 2009-04-01 Purchase 104480.34 TRUE 
10 2010-04-01 Purchase 85399.39 TRUE 
11 2011-04-01 Purchase 78799.05 TRUE 
12 2012-04-01 Purchase 142271.84 TRUE 
13 2013-04-01 Purchase 164240.00 TRUE 
14 2014-04-01 Purchase 54579.00 TRUE 
15 2015-04-01 Purchase  10.00 TRUE 
16 2016-04-01 Purchase 88124.00 TRUE 
17 2001-04-01  Sale 23795.10 TRUE 
18 2002-04-01  Sale 35418.45 TRUE 
19 2003-04-01  Sale 53401.52 TRUE 
20 2004-04-01  Sale 41598.01 TRUE 
21 2005-04-01  Sale 2899.24 TRUE 
22 2006-04-01  Sale 4652.71 TRUE 
23 2007-04-01  Sale 5845.26 TRUE 
24 2008-04-01  Sale 7587.17 TRUE 
25 2009-04-01  Sale 9932.03 TRUE 
26 2010-04-01  Sale 9931.45 TRUE 
27 2011-04-01  Sale 11574.75 TRUE 
28 2012-04-01  Sale 8186.81 TRUE 
29 2013-04-01  Sale 10737.00 TRUE 
30 2014-04-01  Sale 2577.00 TRUE 
31 2015-04-01  Sale 63428.00 TRUE 
32 2016-04-01  Sale 35800.00 TRUE 
33 2001-04-01  Net -19324.05 FALSE 
34 2002-04-01  Net -30334.59 FALSE 
35 2003-04-01  Net -53401.52 FALSE 
36 2004-04-01  Net -41598.01 FALSE 
37 2005-04-01  Net -2899.24 FALSE 
38 2006-04-01  Net -3912.71 FALSE 
39 2007-04-01  Net -5125.38 FALSE 
40 2008-04-01  Net 5922.83 TRUE 
41 2009-04-01  Net 94548.32 TRUE 
42 2010-04-01  Net 75467.93 TRUE 
43 2011-04-01  Net 67224.30 TRUE 
44 2012-04-01  Net 134086.03 TRUE 
45 2013-04-01  Net 153503.00 TRUE 
46 2014-04-01  Net 16675.00 TRUE 
47 2015-04-01  Net -63418.00 FALSE 
48 2016-04-01  Net 52324.00 TRUE 

eine Seite an Seite BarPlot Erstellt zu überlagern:Wie ein Liniendiagramm auf einem BarPlot in ggplot2 für die Zeilen 33 bis 48

library(ggplot2) #development version 

p<-ggplot(df2[33:48,], aes(x=Year, y=value, fill=pos)) + 
    geom_bar(stat='identity', position='identity') + ggtitle("OMO (Rs'crores)\n") + theme(plot.title = element_text(lineheight=.8, face="bold",colour = "darkred",hjust =0.5,vjust = 2,size = 9)) + labs(x = "\nYear", y = "Rs crores\n",caption="Sources:Data is from RBI site")+scale_y_continuous(limits = c(-65000,200000),breaks =c(-60000,-30000,0,30000,60000,90000,120000,150000,180000,180000)) + scale_x_date(date_breaks = "2 year",date_labels = "%Y") 
p 

enter image description here

Ich möchte hinzufügen (Overlay) die Reihen 1 bis 16 und 17 bis 32 als 2 getrenntes Liniendiagramme auf dem obigen Bargraph:

I versucht, diesen:

Hinzufügen der ersten Zeile (Variable == "Kauf") p + geom_line (df2 [1:16], aes (x = Jahr, y = Wert)) Fehler: ggplot2 kann nicht mit Daten umgehen Klasse uneval

Wohin gehe ich falsch?

+0

Versuchen 'p + geom_line (data = df2 [1.16], mapping = aes (x = Jahr, y = Wert)) ' –

Antwort

1

Ich denke, das ist über was Sie wollen. Ich habe den Datenrahmen neu angeordnet und die Werte ein wenig angepasst und eine Legende für die Zeilen hinzugefügt.

library(ggplot2) 
df2 <- read.table(stringsAsFactors=F,text= 
"Year variable  value pos 
1 2001-04-01 Purchase 4471.05 TRUE 
2 2002-04-01 Purchase 5084.00 TRUE 
3 2003-04-01 Purchase  0.00 TRUE 
4 2004-04-01 Purchase  0.00 TRUE 
5 2005-04-01 Purchase  0.00 TRUE 
6 2006-04-01 Purchase 740.00 TRUE 
7 2007-04-01 Purchase 720.00 TRUE 
8 2008-04-01 Purchase 13510.00 TRUE 
9 2009-04-01 Purchase 104480.34 TRUE 
10 2010-04-01 Purchase 85399.39 TRUE 
11 2011-04-01 Purchase 78799.05 TRUE 
12 2012-04-01 Purchase 142271.84 TRUE 
13 2013-04-01 Purchase 164240.00 TRUE 
14 2014-04-01 Purchase 54579.00 TRUE 
15 2015-04-01 Purchase  10.00 TRUE 
16 2016-04-01 Purchase 88124.00 TRUE 
17 2001-04-01  Sale 23795.10 TRUE 
18 2002-04-01  Sale 35418.45 TRUE 
19 2003-04-01  Sale 53401.52 TRUE 
20 2004-04-01  Sale 41598.01 TRUE 
21 2005-04-01  Sale 2899.24 TRUE 
22 2006-04-01  Sale 4652.71 TRUE 
23 2007-04-01  Sale 5845.26 TRUE 
24 2008-04-01  Sale 7587.17 TRUE 
25 2009-04-01  Sale 9932.03 TRUE 
26 2010-04-01  Sale 9931.45 TRUE 
27 2011-04-01  Sale 11574.75 TRUE 
28 2012-04-01  Sale 8186.81 TRUE 
29 2013-04-01  Sale 10737.00 TRUE 
30 2014-04-01  Sale 2577.00 TRUE 
31 2015-04-01  Sale 63428.00 TRUE 
32 2016-04-01  Sale 35800.00 TRUE 
33 2001-04-01  Net -19324.05 FALSE 
34 2002-04-01  Net -30334.59 FALSE 
35 2003-04-01  Net -53401.52 FALSE 
36 2004-04-01  Net -41598.01 FALSE 
37 2005-04-01  Net -2899.24 FALSE 
38 2006-04-01  Net -3912.71 FALSE 
39 2007-04-01  Net -5125.38 FALSE 
40 2008-04-01  Net 5922.83 TRUE 
41 2009-04-01  Net 94548.32 TRUE 
42 2010-04-01  Net 75467.93 TRUE 
43 2011-04-01  Net 67224.30 TRUE 
44 2012-04-01  Net 134086.03 TRUE 
45 2013-04-01  Net 153503.00 TRUE 
46 2014-04-01  Net 16675.00 TRUE 
47 2015-04-01  Net -63418.00 FALSE 
48 2016-04-01  Net 52324.00 TRUE") 

# Rearrange the dataframe 
df2$Year <- as.Date(df2$Year) 
df3 <- df2[33:48,] 
df3$sales <- df2[1:16,"value"] 
df3$purchase <- df2[17:32,"value"] 

# NOw plot it 
p<-ggplot(df3, aes(x=Year, y=value)) + 

    # The bars 
    geom_bar(aes(fill=pos),stat='identity', position='identity') + 
    scale_fill_manual(name="Positive",values=c("TRUE"="gray30","FALSE"="darkred")) + 

    # The Lines 
    geom_line(aes(x=Year,y=purchase,color="purchase"),size=2) + 
    geom_line(aes(x=Year,y=sales,color="sales"),size=2) + 
    scale_y_continuous(limits = c(-65000,200000), breaks = 30000*(-2:6)) + 
    scale_x_date(date_breaks = "2 year",date_labels = "%Y") + 
    scale_colour_manual(name="Value",values =c("purchase"="darkred","sales"="darkblue")) + 

    ggtitle("OMO (Rs'crores)\n") + 
    theme(plot.title = element_text(lineheight=.8, face="bold",colour = "darkred", 
            hjust =0.5,vjust = 2,size = 9)) + 
    labs(x = "\nYear", y = "Rs crores\n",caption="Sources:Data is from RBI site") 

p 

Nachgeben dies:

enter image description here

+0

Wundervoller Kumpel ... Du hast meinen Tag gemacht! – Nishant

+0

Kein Problem, aber bitte akzeptieren (und vielleicht Upvote) die Antwort :) –

+0

Beachten Sie, dass man 'match' verwenden sollte, um die Daten zusammenzuführen, schneiden Sie den Datenrahmen wie folgt, dass die Datumswerte alle von Jahr zu Zeile ausgerichtet sind. –

0

überarbeitet die obige Lösung es richtig

Neuordnen der Datenrahmen

df2$Year <- as.Date(df2$Year) 
df3 <- df2[33:48,] 
df3$purchase <- df2[1:16,"value"] 
df3$sales<- df2[17:32,"value"] 
df3 

es jETzT plotten

p<-ggplot(df3, aes(x=Year, y=value)) + 

Die Stäbe

geom_bar(aes(fill=pos),stat='identity', position='identity') + scale_fill_manual(name="Positive",values=c("TRUE"="#00BFC4","FALSE"="#F8766D")) + theme(panel.grid.minor = element_line(colour = "black", linetype = "dotted",size = 0.3)) + theme(panel.grid.major = element_line(colour = "black", linetype = "dotted",size = 0.3)) + theme(plot.background = element_rect(fill="#e0edbd")) + theme(panel.background = element_rect(fill = "#fbfefe")) + scale_fill_discrete(name="",breaks=c("TRUE","FALSE"),labels=c("Net Purchases(+)","Net Sales(-)")) + 

Die Linien

geom_line(aes(x=Year,y=purchase,color="purchase"),size=1.35) + geom_line(aes(x=Year,y=sales,color="sales"),size=1.35) + scale_y_continuous(limits = c(-65000,200000), breaks = 30000*(-2:6)) + 
    scale_x_date(date_breaks = "2 year",date_labels = "%Y") + scale_colour_manual(name="",values=c("#0072B2","#D55E00"),breaks=c("purchase","sales")) + ggtitle("Open Market Operation(OMO) since 2001 (Rs'crores)\n") + 
    theme(plot.title = element_text(lineheight=.8, face="bold",colour = "darkred",hjust =0.5,vjust = 2,size = 9)) + labs(x = "\nYear", y = "Rs'crores\n",caption="Sources:Data is from RBI site") + theme(plot.caption=element_text(size=8, hjust=1.4, margin=margin(t=10))) 

enter image description here

Verwandte Themen