Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R - stackplot/barplot proportion over time

Tags:

r

bar-chart

I am trying to realise a distribution plot like this one

enter image description here

For each period, I need to graph the "stacked proportion".

The data look like this basically :

         400 401 402 403 404 ...
1013662   7   7   7   7   7
1024583   2   2   2   2   2
1024812   6  27  27  27  27
1025491  48  48  48  48  48
1036642  56  56  56  56  56
....

I thought of something like

ft = function(x) prop.table(table(x), NULL)
apply(dta, MARGIN = 2, FUN = ft)

I would then have a list of proportion for each time period

$`400`
2    6    7   19   24   30   42   46   48   56   67 
0.05 0.05 0.45 0.05 0.10 0.05 0.05 0.05 0.05 0.05 0.05 

I am not sure what the next step would be. I do not know how to properly unlist and store in a dataframe ?

Any idea ?

(I tried the basic barplot(as.matrix(dta)) but it did not seem right).

Here is my data

 dta = structure(c(7L, 2L, 6L, 48L, 56L, 7L, 7L, 7L, 46L, 7L, 7L, 24L, 
        7L, 19L, 7L, 30L, 7L, 24L, 42L, 67L, 7L, 2L, 27L, 48L, 56L, 7L, 
        7L, 7L, 67L, 7L, 7L, 24L, 7L, 20L, 7L, 30L, 7L, 67L, 42L, 23L, 
        7L, 2L, 27L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 24L, 7L, 20L, 
        7L, 30L, 7L, 67L, 42L, 23L, 7L, 2L, 27L, 48L, 56L, 7L, 7L, 7L, 
        67L, 7L, 7L, 24L, 7L, 20L, 7L, 30L, 7L, 67L, 42L, 23L, 7L, 2L, 
        27L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 24L, 7L, 20L, 7L, 30L, 
        7L, 67L, 42L, 23L, 7L, 2L, 27L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 
        7L, 24L, 7L, 20L, 7L, 30L, 7L, 67L, 42L, 23L, 7L, 2L, 27L, 48L, 
        56L, 7L, 7L, 7L, 67L, 7L, 7L, 24L, 7L, 20L, 7L, 30L, 7L, 67L, 
        42L, 23L, 7L, 2L, 27L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 24L, 
        7L, 20L, 7L, 30L, 7L, 67L, 42L, 23L, 7L, 2L, 27L, 48L, 56L, 7L, 
        7L, 7L, 67L, 7L, 7L, 24L, 7L, 20L, 7L, 30L, 7L, 67L, 42L, 23L, 
        7L, 2L, 27L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 24L, 7L, 20L, 
        7L, 30L, 7L, 67L, 42L, 23L, 7L, 2L, 27L, 48L, 56L, 7L, 7L, 7L, 
        67L, 7L, 7L, 24L, 7L, 20L, 7L, 30L, 7L, 67L, 42L, 23L, 7L, 2L, 
        49L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 67L, 7L, 20L, 7L, 30L, 
        7L, 24L, 42L, 23L, 7L, 2L, 49L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 
        7L, 67L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 23L, 7L, 2L, 49L, 48L, 
        56L, 7L, 7L, 7L, 67L, 7L, 7L, 67L, 7L, 20L, 7L, 30L, 7L, 24L, 
        42L, 23L, 7L, 2L, 49L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 67L, 
        7L, 20L, 7L, 30L, 7L, 24L, 42L, 23L, 7L, 2L, 49L, 48L, 56L, 7L, 
        7L, 7L, 67L, 7L, 7L, 67L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 23L, 
        7L, 2L, 49L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 67L, 7L, 20L, 
        7L, 30L, 7L, 24L, 42L, 23L, 7L, 2L, 49L, 48L, 56L, 7L, 7L, 7L, 
        67L, 7L, 7L, 67L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 23L, 7L, 2L, 
        49L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 7L, 67L, 7L, 20L, 7L, 30L, 
        7L, 24L, 42L, 23L, 7L, 2L, 49L, 48L, 56L, 7L, 7L, 7L, 67L, 7L, 
        7L, 67L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 23L, 7L, 2L, 49L, 48L, 
        56L, 7L, 7L, 7L, 67L, 7L, 7L, 67L, 7L, 20L, 7L, 30L, 7L, 24L, 
        42L, 23L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 
        7L, 20L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 
        7L, 7L, 24L, 7L, 7L, 22L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 68L, 
        7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 20L, 
        7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 
        24L, 7L, 7L, 22L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 
        49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 20L, 7L, 30L, 
        7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 
        7L, 22L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 
        67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 20L, 7L, 30L, 7L, 24L, 
        42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 
        7L, 20L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 
        7L, 7L, 24L, 7L, 7L, 22L, 7L, 20L, 7L, 30L, 7L, 24L, 42L, 68L, 
        7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 20L, 
        7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 
        24L, 7L, 7L, 22L, 7L, 21L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 
        49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 21L, 7L, 30L, 
        7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 
        7L, 22L, 7L, 21L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 
        67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 21L, 7L, 30L, 7L, 24L, 
        42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 
        7L, 21L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 
        7L, 7L, 24L, 7L, 7L, 22L, 7L, 21L, 7L, 30L, 7L, 24L, 42L, 68L, 
        7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 21L, 
        7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 
        24L, 7L, 7L, 22L, 7L, 21L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 
        49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 7L, 22L, 7L, 21L, 7L, 30L, 
        7L, 24L, 42L, 68L, 7L, 2L, 49L, 48L, 67L, 7L, 7L, 7L, 24L, 7L, 
        7L, 22L, 7L, 21L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 4L, 48L, 
        67L, 7L, 7L, 7L, 20L, 7L, 7L, 22L, 7L, 18L, 7L, 30L, 7L, 24L, 
        42L, 68L, 7L, 2L, 4L, 48L, 67L, 7L, 7L, 7L, 20L, 7L, 7L, 22L, 
        7L, 18L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 4L, 48L, 67L, 7L, 
        7L, 7L, 20L, 7L, 7L, 22L, 7L, 18L, 7L, 30L, 7L, 24L, 42L, 68L, 
        7L, 2L, 4L, 48L, 67L, 7L, 7L, 7L, 20L, 7L, 7L, 22L, 7L, 18L, 
        7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 4L, 48L, 67L, 7L, 7L, 7L, 
        20L, 7L, 7L, 22L, 7L, 18L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 
        4L, 48L, 67L, 7L, 7L, 7L, 20L, 7L, 7L, 22L, 7L, 18L, 7L, 30L, 
        7L, 24L, 42L, 68L, 7L, 2L, 4L, 48L, 67L, 7L, 7L, 7L, 20L, 7L, 
        7L, 22L, 7L, 18L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 4L, 48L, 
        67L, 7L, 7L, 7L, 20L, 7L, 7L, 22L, 7L, 18L, 7L, 30L, 7L, 24L, 
        42L, 68L, 7L, 2L, 4L, 48L, 67L, 7L, 7L, 7L, 20L, 7L, 7L, 22L, 
        7L, 18L, 7L, 30L, 7L, 24L, 42L, 68L, 7L, 2L, 4L, 48L, 67L, 7L, 
        7L, 7L, 20L, 7L, 7L, 22L, 7L, 18L, 7L, 30L, 7L, 24L, 42L, 68L
), .Dim = c(20L, 51L), .Dimnames = list(c("1013662", "1024583", 
                                      "1024812", "1025491", "1036642", "1037551", "1037552", "1037991", 
                                      "1037992", "1040291", "1040292", "1041101", "1041212", "1041651", 
                                      "104221", "104222", "104331", "104332", "104992", "1052571"), 
                                    c("400", "401", "402", "403", "404", "405", "406", "407", 
                                      "408", "409", "410", "411", "412", "413", "414", "415", "416", 
                                      "417", "418", "419", "420", "421", "422", "423", "424", "425", 
                                      "426", "427", "428", "429", "430", "431", "432", "433", "434", 
                                      "435", "436", "437", "438", "439", "440", "441", "442", "443", 
                                      "444", "445", "446", "447", "448", "449", "450")))
like image 546
giac Avatar asked Jan 28 '26 22:01

giac


1 Answers

After reading rather than skimming the post, I understand that you are wanting to plot the proportions of frequencies of the values. The numerical values themselves do not matter (they could be thought of or coerced to factors if desired).

Then one way to do this is to stack and count with table.

 barplot(table(stack(as.data.frame(dta)))/nrow(dta),space=0,col=rainbow(nrow(dta)))

proportioned bar plot in color

like image 149
A. Webb Avatar answered Jan 31 '26 10:01

A. Webb



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!