Skip to content

how to overlay two histograms

5 messages · Ana Marija, Jim Lemon, Rasmus Liland +1 more

#
Hello,

I am trying to overlay two histograms with this:

p <- ggplot(d, aes(CHR, counts, fill = name)) + geom_bar(position = "dodge")
p

but I am getting this error:
Error: stat_count() can only have an x or y aesthetic.
Run `rlang::last_error()` to see where the error occurred.

my data is this:
CHR counts name
1    1 193554  old
2    2 220816  old
3    3 174350  old
4    4 163112  old
5    5 168125  old
6    6 182366  old
7    7 143023  old
8    8 147410  old
9    9 122112  old
10  10 138394  old
11  11 130069  old
12  12 124850  old
13  13 104119  old
14  14  83931  old
15  15  72287  old
16  16  71550  old
17  17  58380  old
18  18  76812  old
19  19  37040  old
20  20  63407  old
21  21  33863  old
22  22  33812  old
23   1 202783  new
24   2 252124  new
25   3 213337  new
26   4 201001  new
27   5 207606  new
28   6 228133  new
29   7 147218  new
30   8 177518  new
31   9 121276  new
32  10 163447  new
33  11 158724  new
34  12 142183  new
35  13 111189  new
36  14  83043  new
37  15  61063  new
38  16  55439  new
39  17  32883  new
40  18  69135  new
41  19  16624  new
42  20  48541  new
43  21  25479  new
44  22  19698  new

Basically I need to show counts per CHR in "old" and "new" side by side.

Please advise,
Ana
#
Hi Ana,
Sorry it's not in ggplot, but it may help:

d<-read.table(text="CHR counts name
  1 193554  old
  2 220816  old
  3 174350  old
  4 163112  old
  5 168125  old
  6 182366  old
  7 143023  old
  8 147410  old
  9 122112  old
 10 138394  old
 11 130069  old
 12 124850  old
 13 104119  old
 14  83931  old
 15  72287  old
 16  71550  old
 17  58380  old
 18  76812  old
 19  37040  old
 20  63407  old
 21  33863  old
 22  33812  old
  1 202783  new
  2 252124  new
  3 213337  new
  4 201001  new
  5 207606  new
  6 228133  new
  7 147218  new
  8 177518  new
  9 121276  new
 10 163447  new
 11 158724  new
 12 142183  new
 13 111189  new
 14  83043  new
 15  61063  new
 16  55439  new
 17  32883  new
 18  69135  new
 19  16624  new
 20  48541  new
 21  25479  new
 22  19698  new",
header=TRUE,stingsAsFactors=FALSE)
barpos<-barplot(counts~name+CHR,data=d,beside=TRUE,names.arg=rep("",22))
legend(40,220000,c("new","old"),fill=c("gray20","gray80"))
library(plotrix)
staxlab(1,at=colMeans(barpos),labels=1:22)

Jim
On Fri, Sep 18, 2020 at 8:05 AM Ana Marija <sokovic.anamarija at gmail.com> wrote:
#
On 2020-09-17 17:01 -0500, Ana Marija wrote:
Dear Ana,

you need to specify stat="identity" [1], 
like so:

	mapping <- ggplot2::aes(
	  x=CHR,
	  y=counts,
	  fill=name)
	p <-
	  ggplot2::ggplot() +
	  ggplot2::geom_bar(
	    data=d,
	    mapping = mapping,
	    position="dodge",
	    stat="identity")

Best,
Rasmus

[1] https://stackoverflow.com/questions/61068031/error-stat-count-can-only-have-an-x-or-y-aesthetic

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20200918/8f6f13a4/attachment.sig>
#
HI Jim,

fantastic solution!
Thank you so much!!!

Ana
On Thu, Sep 17, 2020 at 6:01 PM Jim Lemon <drjimlemon at gmail.com> wrote:
#
Is this what you want?

ggplot(d, aes(counts, fill = name)) +
      geom_bar(stat = "bin", position = "dodge")

Note: You probably should play around with the "bin" width.

On Thu, 17 Sep 2020 at 18:05, Ana Marija <sokovic.anamarija at gmail.com>
wrote: