# [R] [FORGED] Re: bar plot add space to group data

David L Carlson dc@r|@on @end|ng |rom t@mu@edu
Sun Aug 19 20:10:29 CEST 2018

```Actually the data you provided are a data frame and not a matrix as R uses the term. Two columns of gceac are numeric and one is a factor. If we read your data with read.csv() we get:

> str(gceac)
'data.frame':   35 obs. of  3 variables:
\$ year      : int  2014 2014 2014 2014 2014 2014 2014 2015 2015 2015 ...
\$ grade     : Factor w/ 7 levels "A","A*","B","C",..: 2 1 3 4 5 6 7 2 1 3 ...
\$ percentage: int  9 23 27 19 13 7 2 9 23 27 ...

Now we see problem in grade column. Your plot has A* before A, but the factor is created alphabetically so A comes before A*. We can fix that

"E", "U"))

[1] "A*" "A"  "B"  "C"  "D"  "E"  "U"

Now you need a matrix for the barplot. That is simple with xtabs()

> gceac.mat
year
grade 2014 2015 2016 2017 2018
A*    9    9    8    8    8
A    23   23   23   23   22
B    27   27   27   24   23
C    19   19   19   20   20
D    13   13   13   14   15
E     7    7    7    8    8
U     2    2    3    3    3

Now we can build your bar plot using almost the same command you used:

> clrs <- c('aliceblue', 'aquamarine', 'blue', 'chocolate', 'darkgreen',
+      'firebrick', 'violet')
> barplot(gceac.mat, xlab='year', ylab='percentage of each grade',
+      col=clrs, legend=TRUE, args.legend = list("topright",
+      space=c(0, 1), ylim=c(0,35))

I defined clrs so that the barplot() function would be easier to read, but it works the same your way. Now we just need legend=TRUE and we can position the legend in the top right with the args.legend= argument. The legend overlaps the bars a bit so I increased the y-axis to 35. A .png file is attached.

David L. Carlson
Department of Anthropology
Texas A&M University

-----Original Message-----
From: R-help [mailto:r-help-bounces using r-project.org] On Behalf Of Peter Langfelder
Sent: Sunday, August 19, 2018 10:51 AM
To: citc using disroot.org
Cc: r-help <r-help using r-project.org>
Subject: Re: [R] [FORGED] Re: bar plot add space to group data

On Sun, Aug 19, 2018 at 7:15 AM <citc using disroot.org> wrote:
>
> August 19, 2018 4:58 AM, "Peter Langfelder" <peter.langfelder using gmail.com> wrote:
>
> > To the OP, try formatting the data to be plotted as a matrix, not as a
> > vector
>
> CSV data provided in a previous message; is not the data formatted as a matrix?

I meant the data you give to barplot - your code supplies only the
third column of the data frame, so barplot only sees a vector. I would
try something like

plotData = do.call(cbind, tapply(csv.data\$percentage, csv.data\$year, identity))

Peter

______________________________________________
R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help