4
votes

I'm pretty happy with the results I'm getting with R. Most of my stacked histogram plots are looking fine, e.g.

enter image description here

and

enter image description here

However, I have a few that have so many categories in the legend that the legend is crowing out the plot, e.g.

enter image description here

How can I fix this?

Here is my plot.r, which I call on the command line like this

RScript plot.r foo.dat foo.png 1600 800

foo.dat

account,operation,call_count,day
cal3510,foo-method,1,2016-10-01
cra4617,foo-method,1,2016-10-03
cus4404,foo-method,1,2016-10-03
hin4510,foo-method,1,2016-10-03
mas4484,foo-method,1,2016-10-04
...

entirety of foo.dat: http://pastebin.com/xnJtJSrU

plot.r

library(ggplot2)
library(scales)

args<-commandArgs(TRUE)

filename<-args[1]
png_filename<-args[2]

wide<-as.numeric(args[3])
high<-as.numeric(args[4])

print(wide)
print(high)

print(filename)
print(png_filename)

dat = read.csv(filename)

dat$account = as.character(dat$account)
dat$operation = as.character(dat$operation)
dat$call_count = as.integer(dat$call_count)
dat$day = as.Date(dat$day)

png(png_filename,width=wide,height=high)

p <- ggplot(dat, aes(x=day, y=call_count, fill=account))
p <- p + geom_histogram(stat="identity")
p <- p + scale_x_date(labels=date_format("%b-%Y"), limits=as.Date(c('2016-10-01','2017-01-01')))

print(p)

dev.off()
1
You should consider removing the legend. It has more noise than information. - Pierre L
@slashdottir where is the .csv file you are reading? - shiny
@aelwan it is passed in on the command line e.g. foo.dat - slashdottir
You can place the legend underneath the plot theme(legend.position="bottom") - Pierre L
You can also specify the number of rows or columns of the legend guides(fill=guide_legend(nrow=2, byrow=TRUE)) - Pierre L

1 Answers

12
votes

Answer from @PierreLafortune

using:

p <- p + theme(legend.position="bottom")
p <- p + guides(fill=guide_legend(nrow=5, byrow=TRUE))

much improved