# [R] Barplot coloring question

Shravan Vasishth vasishth at coli.uni-sb.de
Fri Jul 26 14:18:03 CEST 2002

```On Thu, 25 Jul 2002, Marc Schwartz wrote in response:

> The "list" of colors that you have specified for colorlist contains only
> one entry.
>
> If you specify:
>
> colorlist <- c("red", "blue", ...)
>
> You bars or their stacked segments will cycle through the colors,
> depending upon whether beside is TRUE or FALSE, respectively.
>
> Just be sure to specify one color for each group in your data.

Right. I had tried that earlier but that alone didn't work; sorry, I
should have mentioned that.  But having beside as TRUE works (with a list
of colours). I wanted to keep beside = FALSE because I wanted to control
the space between bars, as I decribe below with toy examples.

In the first kind of barplot I want, I have data like this:

A A  B  B  C  C
0  5 10 15 20 70 90

I can plot it using code like this:

colorlist2 <- c("orange","limegreen")

barplot(data2,
beside=TRUE,
col=colorlist2,
width = c(1,.55),
space = c(2.75,.25),
axes = F
)

I want to be able to manipulate the spaces between the bars pairwise: the
contiguous AA should be closer to each other than the contiguous AB. I
thought that a vector specification for space would do this, because this
works for the plot of a slightly different dataset that I have (below).
But it doesn't in the above case.

Here's an example where "space" DOES work as (I) expected:

The data set:

A  A  B  B  C  C
1  5  10 15 20 70 90
2  20 15 24 56 34 70
3  40 54 23 67 12 78

The code:

colorlist3 <- c("orange","lightblue","darkblue")

barplot(data3,
beside=FALSE,
col=colorlist3,
xlim = c(1,6),
width = c(.5,.35),
space = c(2.75,.25),
axes = F
)

As expected, "colorlist" in both examples cycles through the list of
colors, but when beside = TRUE it uses each color for each column in the
data, and when beside = FALSE the list of colors is cycled through for
each bar's components. In the *first* case, I'm trying to get the two
colors to alternate (which works only when beside = TRUE), but for some
reason I then lose control over "space".

Any suggestions would be greatly appreciated.

Thanks,

> Date: Thu, 25 Jul 2002 13:29:06 -0500
> From: Marc Schwartz <mschwartz at medanalytics.com>
> To: 'Shravan Vasishth' <vasishth at CoLi.Uni-SB.DE>, r-help at stat.math.ethz.ch
> Subject: RE: [R] Barplot coloring question
>
> > Hi all,
> >
> > I have the following dataset, call it test.data (30 columns, and one
> row
> > named "0"):
> >
> >   ADVP  ADVP AP    AP   CONJ  CONJ CP    CP   DU    DU    INF   INF
> MWU
> > MWU  NP    NP    PP    PP    PPRT PPRT REL   REL  SMN SMN SSB  SSB SV1
> > SV1 TI    TI
> > 0 96.85 2.05 89.07 2.54 70.91 2.37 94.92 3.46 82.31 11.33 40.96 2.25
> 98.06
> > 3.43 90.77 17.63 86.60 10.78 60.27 1.32  93.27 0.97 77.60 12.46 64.98
> 3.32
> > 88.54 3.70 24.33 0.28
> >
> > I'm trying to plot these data points so that any pair of identical
> columns
> > (e.g., ADVP) are plotted closer to each other than any neighbouring
> pairs.
> >
> > This much is easy to do:
> >
> >
> > colorlist <- c("red")
> >
> > # build basic barplot:
> >
> > barplot(data,
> >         beside=FALSE,     # don't put bars beside each other
> >         col=colorlist,    # list of colors
> >         xlim = c(1,40),   # x-axis limits
> >         width = .65,      # width of bar plots
> >         ylim=c(0, 140),   # y-axis limits
> >         space = c(1,.5),  # space between bars, and between bar-pairs
> >         axes = F          # don't plot y-axis yet
> >         )
> >
> > This gives a graph with the same color for each bar.
> >
> > The problem is that I want the first instance of a pair of identical
> > columns to have a certain colour, and the other one a different one.
> So,
> > the bars should really have an alternating pattern like red green red
> > green... and so on, not just one colour.
> >
> > For the above dataset I could set beside=TRUE and transform the
> dataset to
> > two rows and 15 columns rather than the current 1x30, so something
> like:
> >
> > 0a 96.85
> > 0b  2.05
> >
> > but I will eventually need to plot a matrix like
> >
> > 1 30   40
> > 2 20   20
> > 3 10   5
> >
> > and there I will want beside=FALSE because I want the 1, 2, 3 rows to
> > appear *within* a bar, but I still want pairs of bars for ADVP.
> >
> > This is why I don't want to set beside=FALSE.
> >
> > I'll be very grateful for any suggestions.
>
>
> HTH.
>
> Marc
>
>
>

--
Dr. Shravan Vasishth                           Phone: +49 (681) 302 4504
Computational Linguistics, Universität des Saarlandes, Postfach 15 11 50
D-66041 Saarbrücken, Germany         http://www.coli.uni-sb.de/~vasishth

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```