---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 Histograms 3D and mosaic graphs.

# Employed persons in Italy at 2012:
#            males  females
# primary     603     246
# secondary  5051    1311
# tertiary   7787    7901
da = c(603,5051,7787, 246,1311,7901)
T = array(da, dim=c(3,2)); T
     [,1] [,2]
[1,]  603  246
[2,] 5051 1311
[3,] 7787 7901
# If I want the percentage distribution (and the names)
name = list(c("primary","secondary","tertiary"), c("males","females"))  # 3×:2
T1 = array(round(da/sum(da)*100,2), dim=c(3,2) , dimnames=name); T1
          males females
primary    2.63    1.07
secondary 22.06    5.73
tertiary  34.01   34.50
# I add the names to T:
T2 <- array(da, dim=c(3,2),dimnames=name); T2
          males females
primary     603     246
secondary  5051    1311
tertiary   7787    7901
# The marginal distribution of the sex
colSums(T2)/sum(T2)*100
   males  females 
58.69689 41.30311 
round(colSums(T2)/sum(T2)*100,3)
  males females 
 58.697  41.303
 
# The histogram:
histo3D(T,-50,30,1)              # the graph on the left:



# -50, 30 (or other values) indicate the position of the eye: the direction (teta) of
# the look projected on the horizontal plane and its inclination (fi) relative to that
# plane.  1 indicate to trace the box.
histo3D(T,-50,30,0)
# With 0 I do not trace the box (graph in the center).
# The strings "I II III" and "F M" are written in the point xP,yP where I click
# after I typed PPP()
# 
PPP()
text(xP,yP,"I II III")
PPP()
text(xP,yP,"F M")
#
# The graph on the right is called "mosaic plot".
# It is a convenient alternative to the 3D histogram.
da = c(603,5051,7787, 246,1311,7901)
name <- list(c("I","II","III"),c("M","F"))
dat = array(da,dim=c(3,2), dimnames=name)
mosaicplot(dat)
#
# Some variants.
 
# If instead of 0 (or 1) at the end I use 0.n (or 1.n) I reduce the width of the
# columns (a little if n is 1, 2, … a lot if n is 9, 8, …)
# If instead of teta (50 in this case) I use teta.n I reduce the height of the columns
isto3D(T,-50.4,30,0.3)              # the first graph
isto3D(T,-50.7,30,0)                # the second graph
# If instead of fi (30 in this case) I use fi.1 I draw only the roofs of the columns
isto3D(T,-50.4,30.1,0)
# If instead of 0 (or 1) at the end I use 0.01 (or 1.01) I obtain a polygon mesh
# (the vertices are the centers of the rectangles)
isto3D(T,-50.4,30,1.01)
# If I put DIST=1 the distance of the eye is great
DIST=1; isto3D(T,200.4,10,1.01)
          

# Other commands for the tables
 
prop.table(T)
           [,1]       [,2]
[1,] 0.02633303 0.01074283
[2,] 0.22057732 0.05725141
[3,] 0.34005852 0.34503690
 
prop.table(T1)
           males females
primary   0.0263  0.0107
secondary 0.2206  0.0573
tertiary  0.3401  0.3450
 
round(prop.table(T1)*100,1)
          males females
primary     2.6     1.1
secondary  22.1     5.7
tertiary   34.0    34.5
 
T1[1,]
  males females 
   2.63    1.07
 
T1[,2]
  primary secondary  tertiary 
     1.07      5.73     34.50
 
# The distribution of 1st and 2nd col
 
round(prop.table(T1[,1])*100,1)
  primary secondary  tertiary 
      4.5      37.6      57.9
 
round(prop.table(T1[,2])*100,1)
  primary secondary  tertiary 
      2.6      13.9      83.5 

Other examples of use