Grouped tablet with cut axis

I am trying to make a plot with grouped line items and an axial axis. However, I can't seem to get both. Using this data:

d = t(matrix( c(7,3,2,3,2,2,852,268,128,150,
              127,74,5140,1681,860,963,866,
              470,26419,8795,4521,5375,4514,2487),
            nrow=6, ncol=4 ))
colnames(d)=c("A", "B", "C", "D", "E", "F")

I can get grouped hatchings, for example:

barplot( d, beside = TRUE)

Example

Then I can get the split y axis using:

# install.packages('plotrix', dependencies = TRUE)
require(plotrix)
gap.barplot( as.matrix(d), 
             beside = TRUE, 
             gap=c(9600,23400), 
             ytics=c(0,3000,6000,9000,24000,25200,26400) )

enter image description here

However, I lose the grouping and labeling of A, B, C .... How can I get both?

+4
source share
2 answers

You can do it manually. Like barplot, ?gap.barplotreturns the center positions of the columns. Use them to add tags.

Using spacefor separation between groups, as in regular ones barplot, does not seem to work. We can use the string NA to crack space.

d = t(matrix( c(7,3,2,3,2,2,852,268,128,150,
                                127,74,5140,1681,860,963,866,
                                470,26419,8795,4521,5375,4514,2487),
                            nrow=6, ncol=4 ))
colnames(d)=c("A", "B", "C", "D", "E", "F")

# add row of NAs for spacing
d=rbind(NA,d)

# install.packages('plotrix', dependencies = TRUE)
require(plotrix)

# create barplot and store returned value in 'a'
a = gap.barplot(as.matrix(d), 
                gap=c(9600,23400), 
                ytics=c(0,3000,6000,9000,24000,25200,26400),
                xaxt='n') # disable the default x-axis

# calculate mean x-position for each group, omitting the first row 
# first row (NAs) is only there for spacing between groups
aa = matrix(a, nrow=nrow(d))
xticks = colMeans(aa[2:nrow(d),])

# add axis labels at mean position
axis(1, at=xticks, lab=LETTERS[1:6])
+5

koekenbakker :

# install.packages('plotrix', dependencies = TRUE)
require(plotrix)

d = t(matrix( c(7,3,2,3,2,2,852,268,128,150,
                127,74,5140,1681,860,963,866,
                470,26419,8795,4521,5375,4514,2487),
              nrow=6, ncol=4 ))

# Hack for grouping (leaves the extra space at the end)
e = as.vector(rbind(d, rep(NA, 6)))[1:29]

a = gap.barplot(ceiling(as.matrix(e/60)), 
                gap=c(160,390),
                col=rep(c(grey.colors(4), 1), 6),
                #space=rep(c(rep(0,3), 1), 6),
                ytics=c(0,50,100,150,400,420,440),
                xaxt='n') # disable the default x-axis

xticks=c(2.5, 7.5, 12.5, 17.5, 22.5, 27.5)

# add axis labels at mean position
axis(1, at=xticks, LETTERS[1:6] )

legend("topright", LETTERS[7:10],
       bty="n",  
       fill=grey.colors(4)) 

enter image description here

+2

Source: https://habr.com/ru/post/1544446/


All Articles