2

I have a data frame like this:

Server

     Date     Server  Space
1 2010-01-30 server1       100
2 2010-02-28 Server1       400  
3 2010-03-30 Server1     300
4 2010-04-30 Server2       200
5 2010-05-30 Server2       500  
6 2010-06-30 Server2       300

based on this data frame, I use aggregate to group Harddisk usage by month and store it in a data frame called z, as below. z

  Month   Value
1 2010-01 600
2 2010-02 700
3 2010-03 800
4 2010-04 900
5 2010-05 800
6 2010-06 900

I am trying to create a stack chart on x and put a line on the total based on z on top of the same stack chart using ggplot2.

syntax is below:

I had to do this to avoid (Error: Discrete value supplied to continuous scale)

server$Date<-as.character(server$Date)

then run this:

ggplot(server, aes(Date, Space)) +  geom_bar(aes(fill=Server), stat="identity", position="stack") + theme_bw() + scale_x_discrete(name="Date") + scale_y_continuous("Space") +  opts(axis.title.x = theme_text(face="bold", colour="#990000", size=15),axis.text.x  = theme_text(angle=90), axis.title.y = theme_text(face="bold", colour="#990000", angle=90, size=15)) + geom_smooth(data=z,aes(Month,Value,group=1), method="lm", size=2, color="darkblue") 

This works but on my xaxis, I have two sets of data, which looks very cluttered. Is it possible to hide or suppress the dates from x data frame and only show z$Month on xaxis?

I can use this:

scale_x_date(labels = date_format("%m-%Y")) 

But when I do this, xaxis is now showing 01-1970 for all data points.

*Update * Let me ask this question in other way. I like to create a stack chart and on top of the stack, put a linear line using geom_smooth() to show where the total usage is going. I was thinking use x data frame to build the stack chart, then create another data frame for the total value and create the geom_smooth() line based on the total data frame as z. Doing it this way, puts 2 data values to the xaxis.

Rather than doing it this way, is it possible to draw geom_smooth() on the stack bar based on x data frame?

This is the dput of the data frame:

server <- structure(list(Date = structure(c(1325394000, 1325480400, 1325566800, 
1325653200, 1325739600, 1325826000, 1325912400, 1325998800, 1326085200, 
1326171600, 1326258000, 1326344400, 1326430800, 1326517200, 1326603600, 
1326690000, 1326776400, 1325394000, 1325480400, 1325566800, 1325653200, 
1325739600, 1325826000, 1325912400, 1325998800, 1326085200, 1326171600, 
1326258000, 1326344400, 1326430800, 1326517200, 1326603600, 1326690000, 
1326776400, 1325394000, 1325480400, 1325566800, 1325653200, 1325739600, 
1325826000, 1325912400, 1325998800, 1326085200, 1326171600, 1326258000, 
1326344400, 1326430800, 1326517200, 1326603600, 1326690000, 1326776400, 
1328072400, 1328158800, 1328245200, 1328331600, 1328418000, 1328504400, 
1328590800, 1328677200, 1328763600, 1328850000, 1328936400, 1329022800, 
1329109200, 1329195600, 1329282000, 1329368400, 1329454800, 1328072400, 
1328158800, 1328245200, 1328331600, 1328418000, 1328504400, 1328590800, 
1328677200, 1328763600, 1328850000, 1328936400, 1329022800, 1329109200, 
1329195600, 1329282000, 1329368400, 1329454800, 1328072400, 1328158800, 
1328245200, 1328331600, 1328418000, 1328504400, 1328590800, 1328677200, 
1328763600, 1328850000, 1328936400, 1329022800, 1329109200, 1329195600, 
1329282000, 1329368400, 1329454800, 1330578000, 1330664400, 1330750800, 
1330837200, 1330923600, 1331010000, 1331096400, 1331182800, 1331269200, 
1331355600, 1331442000, 1331524800, 1331611200, 1331697600, 1331784000, 
1331870400, 1331956800, 1330578000, 1330664400, 1330750800, 1330837200, 
1330923600, 1331010000, 1331096400, 1331182800, 1331269200, 1331355600, 
1331442000, 1331524800, 1331611200, 1331697600, 1331784000, 1331870400, 
1331956800, 1330578000, 1330664400, 1330750800, 1330837200, 1330923600, 
1331010000, 1331096400, 1331182800, 1331269200, 1331355600, 1331442000, 
1331524800, 1331611200, 1331697600, 1331784000, 1331870400, 1331956800
), class = c("POSIXct", "POSIXt"), tzone = ""), Server = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("ServerA", "ServerB", 
"ServerC"), class = "factor"), Space = c(100, 110, 110, 120, 
120, 130, 130, 140, 140, 150, 150, 160, 160, 170, 170, 180, 200, 
220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440, 460, 
480, 500, 520, 540, 560, 580, 600, 620, 640, 660, 680, 700, 720, 
740, 760, 780, 800, 820, 840, 860, 880, 100, 110, 110, 120, 120, 
130, 130, 140, 140, 150, 150, 160, 160, 170, 170, 180, 200, 220, 
240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480, 
500, 520, 540, 560, 580, 600, 620, 640, 660, 680, 700, 720, 740, 
760, 780, 800, 820, 840, 860, 880, 550, 110, 560, 120, 570, 130, 
580, 140, 590, 150, 600, 160, 610, 170, 620, 180, 200, 550, 570, 
590, 610, 630, 650, 670, 690, 710, 730, 750, 600, 620, 640, 660, 
680, 700, 720, 740, 760, 780, 800, 820, 840, 860, 880, 900, 920, 
940, 960, 980, 1000, 1020, 1000)), .Names = c("Date", "Server", 
"Space"), row.names = c(NA, 153L), class = "data.frame")



z <- structure(list(Month = c("2012-01", "2012-02", "2012-03"), Value = c(21140, 
21140, 32010)), .Names = c("Month", "Value"), row.names = c(NA, 
-3L), class = "data.frame")
Mike Dude
  • 151
  • 2
  • 4
  • 16
  • 1
    Please pay closer attention to the formatting tools available to you when writing and editing questions. – joran Aug 01 '12 at 15:48
  • no one has any input on this? – Mike Dude Aug 02 '12 at 13:08
  • Welcome to StackOverflow. Perhaps if you made a [reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) that demonstrates your question / problem, people would find it easier to answer. In your case, use `dput()` to replicate your data and post it into the question. – Andrie Aug 02 '12 at 15:55
  • Hi @Andrie I am getting together the info now, I appreciate your willing to help. – Mike Dude Aug 02 '12 at 16:08
  • hi @Andrie, I just posted firs data frame and second data frame. – Mike Dude Aug 02 '12 at 16:26
  • I have tried your code, but it's not reproducible. The ggplot call contains syntax errors, and refers to non-existent columns in the data frame. If you want help, please make it easy for us to help you. – Andrie Aug 02 '12 at 16:37
  • @Andrie, I just update the code. My problem is that xaxis show two sets of date, 1 from data frame x and one from data frame z. Can I hide/supress one of them, I dont care which one. – Mike Dude Aug 02 '12 at 16:57
  • What is data frame x? Try posting your code into a clean R session. If it works, it is reproducible. – Andrie Aug 02 '12 at 17:02

1 Answers1

1

Since you are working with dates (and not DateTimes), you'll find it easier if both your date columns are as.Date objects:

server$Date <- as.Date(server$Date)
z$Month <- as.Date(paste0(z$Month, "-01"))

ggplot(server, aes(Date, Space)) +  
  geom_bar(aes(fill=Server), stat="identity", position="stack") +
  geom_point(data=z,aes(Month,Value,group=1), color="darkblue") +
  geom_line(data=z,aes(Month,Value,group=1), color="darkblue")

enter image description here

Andrie
  • 176,377
  • 47
  • 447
  • 496
  • I have to use geom_smooth() not geom_line(), Also, I am getting this error: Error: Discrete value supplied to continuous scale – Mike Dude Aug 02 '12 at 17:42
  • @Adrie, I got one quick question. when I do geom_bar(aes(x=Date,y=TableVolumeRecordCount/1000000,fill=Tablename), stat="identity", position="stack"), xaxis label says it like 00:00 not readible at all. When do geom_points() I can see the date on xaxis. How can I modify this so that I can read the dates on xaxis? – Mike Dude Aug 02 '12 at 18:18