0
I am trying to make a barplot with positive and negative values using two tables. The tables look like this:

> dput(up.counts)
structure(list(deg.phase = c("Early", "Early", "Early", "Early", 
"Early", "Late", "Late", "Late", "Late", "Late", "Both"), contrast.names = structure(1:11, .Label = c("1 dpi", 
"7 dpi", "Post-Oviposition", "Within 14 dpi", "Early", "22 dpi", 
"Longer", "Adapted R", "Adapted S", "Late", "Nymph"), class = "factor"), 
    degs = c(92L, 95L, 4210L, 2262L, 511L, 1798L, 124L, 163L, 
    120L, 553L, 2230L), reg = c("UP", "UP", "UP", "UP", "UP", 
    "UP", "UP", "UP", "UP", "UP", "UP")), row.names = c(NA, -11L
), class = "data.frame")

> dput(dn.counts)
structure(list(deg.phase = c("Early", "Early", "Early", "Early", 
"Early", "Late", "Late", "Late", "Late", "Late", "Both"), contrast.names = structure(1:11, .Label = c("1 dpi", 
"7 dpi", "Post-Oviposition", "Within 14 dpi", "Early", "22 dpi", 
"Longer", "Adapted R", "Adapted S", "Late", "Nymph"), class = "factor"), 
    degs = c(-101, -95, -4363, -2262, -503, -2758, -125, -233, 
    -183, -608, -2294), reg = c("DN", "DN", "DN", "DN", "DN", 
    "DN", "DN", "DN", "DN", "DN", "DN")), row.names = c(NA, -11L
), class = "data.frame")





>up.counts
 deg.phase   contrast.names degs reg
1      Early            1 dpi   92  UP
2      Early            7 dpi   95  UP
3      Early Post-Oviposition 4210  UP
4      Early    Within 14 dpi 2262  UP
5      Early            Early  511  UP
6       Late           22 dpi 1798  UP
7       Late           Longer  124  UP
8       Late        Adapted R  163  UP
9       Late        Adapted S  120  UP
10      Late             Late  553  UP
11      Both            Nymph 2230  UP

>dn.counts
deg.phase   contrast.names  degs reg
1      Early            1 dpi  101  DN
2      Early            7 dpi   95  DN
3      Early Post-Oviposition 4363  DN
4      Early    Within 14 dpi 2262  DN
5      Early            Early  503  DN
6       Late           22 dpi 2758  DN
7       Late           Longer  125  DN
8       Late        Adapted R  233  DN
9       Late        Adapted S  183  DN
10      Late             Late  608  DN
11      Both            Nymph 2294  DN

I use the following code to make the barplots, however, I end up losing the oviposition bar (particularly the positive value one) each time I make it.

dn.counts$degs = dn.counts$degs*-1
up.counts$contrast.names = as.character(up.counts$contrast.names)
up.counts$contrast.names = factor(up.counts$contrast.names, levels = unique(up.counts$contrast.names))
dn.counts$contrast.names = as.character(dn.counts$contrast.names)
dn.counts$contrast.names = factor(dn.counts$contrast.names, levels = unique(dn.counts$contrast.names))
breaksup = levels(up.counts$contrast.names)
breaksdn = levels(dn.counts$contrast.names)

Plot Code:

 cdeg1 = ggplot() +  
  geom_bar(data = up.counts, aes(x = contrast.names, y = degs, fill = deg.phase), stat = "identity",  width = 1) +
  new_scale_fill() + 
  geom_bar(data = dn.counts, aes(x = contrast.names, y = degs, fill = deg.phase), stat ="identity", width = 1) +
  theme(legend.box = "horizontal", legend.margin = margin(0,0,0,-0.6, "cm"), legend.box.margin =  margin(0,1,0,1, "cm"), legend.title = element_text(size = 14), legend.text = element_text(size = 12)) + scale_y_continuous(limits = c(-5000,4000), breaks = ybreaks, labels = abs(ybreaks)) +
cdeg1

Not sure how to resolve the issue. I would also like to bunch the bars by the deg.phase column and make positive values and negative values particular colors. Any help would be appreciated. Thanks.

Incorrect Plot I get with my code and the table above

  • 3
    Hi Patrick. To help us to help would you mind sharing [a minimal reproducible example](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) including a snippet of your data(sets) as a `dput()`. To share your data, you could type `dput(NAME_OF_DATASET)` into the console and copy & paste the output starting with `structure(....` into your post. If your dataset has a lot of observations you could do e.g. `dput(head(NAME_OF_DATASET, 20))` for the first twenty rows of data. – stefan Oct 20 '21 at 06:17
  • 1
    Modified to be more reproducible. – Patrick Thomas Oct 20 '21 at 08:25
  • Try with `limits = c(-5000, 5000)`- The issue is simply that you have set the upper limit of the y-scale to `4000` while the value for `Post-Oviposition` is > 4000 and hence gets dropped as it falls outside of the limits. – stefan Oct 20 '21 at 13:31

0 Answers0