I used the answer from this question:
But the x-axis labels are cut off in the final plot. I need them to be seen, and they need to stay rotated.
I tried
par(mar = c(1,6,2,1) 1)
before the final 2 plots for the panel but that changes the size of the actual plot instead of making the x-axis labels visible.
How can I make the x-axis labels visible?
If you can use the data from the linked example that would work fine.
set.seed(42)
catA <- factor(c("m100", "m500", "m1000", "m2000", "m3000", "m5000"))
catB <- factor(20:28)
samples <- 100
rsample <- function(v) v[ceiling(runif(samples, max=length(v)))]
Tab <- data.frame(catA = rsample(catA),
catB = rsample(catB),
valA = rnorm(samples, 150, 8),
valB = pmin(1,pmax(0,rnorm(samples, 0.5, 0.3))))
op <- par(mfrow = c(2,2),
oma = c(5,4,0,0) 0.1,
mar = c(0,0,1,1) 0.1)
for (i in 0:3) {
x <- Tab[[1 i %% 2]]
plot(x, Tab[[3 i %/% 2]], axes = FALSE)
axis(side = 1,
at=1:nlevels(x),
labels = if (i %/% 2 == 1) levels(x) else FALSE)
axis(side = 2, labels = (i %% 2 == 0))
box(which = "plot", bty = "l")
}
title(xlab = "Some Categories",
ylab = "Some Values",
outer = TRUE, line = 3)
par(op)
CodePudding user response:
Labels get automatically hidden according to the margins size.You are probably using the RStudio "Plots" tab, and if you resize the window, more labels show up. Better use another device, e.g. pdf
or png
device, where you may define a fixed size and the output is always the same.
You could use a case handling via modulo for the entire axes, not just the labels. Further you could define the las
parameters which rotates the tick labels, also using modulo, yielding 1
(always horozontal) or 2
(always perpendicular) depending on case (here long or short labels). Slightly expand second oma
to show y axis label.
png('plot1.png', width=600, height=600) ## open device
op <- par(mfrow=c(2, 2), oma=c(6, 6, 0, 0) 0.1, mar=c(0, 0, 1, 1) 0.1)
for (i in 0:3) {
x <- Tab[[1 i %% 2]]
plot(x, Tab[[3 i %/% 2]], axes=FALSE)
if (i %/% 2 == 1) {
axis(side=1, at=1:nlevels(x), labels=levels(x), las=(1 - i %% 2) 1)
}
if (i %% 2 == 0) {
axis(side=2, labels=TRUE, las=2)
}
box()
}
title(xlab="Some Categories", ylab="Some Values", outer=TRUE, line=4)
par(op)
dev.off() ## close device (plot is saved in wd)
I assumed you only wanted to show axis ticks and labels at the outer margins, otherwise, please comment.
Data:
Tab <- structure(list(catA = structure(c(6L, 6L, 5L, 4L, 3L, 3L, 4L,
1L, 3L, 4L, 2L, 4L, 6L, 5L, 2L, 6L, 6L, 1L, 2L, 3L, 6L, 1L, 6L,
6L, 1L, 3L, 2L, 6L, 2L, 6L, 4L, 4L, 2L, 4L, 1L, 4L, 1L, 5L, 6L,
3L, 2L, 2L, 1L, 6L, 2L, 6L, 6L, 3L, 6L, 3L, 2L, 2L, 2L, 4L, 1L,
4L, 4L, 5L, 5L, 3L, 4L, 6L, 4L, 3L, 6L, 5L, 5L, 4L, 4L, 5L, 1L,
1L, 5L, 2L, 5L, 4L, 1L, 2L, 3L, 1L, 3L, 1L, 2L, 3L, 4L, 3L, 5L,
1L, 1L, 5L, 4L, 1L, 5L, 6L, 6L, 4L, 5L, 3L, 4L, 3L), levels = c("m100",
"m1000", "m2000", "m3000", "m500", "m5000"), class = "factor"),
catB = structure(c(6L, 2L, 2L, 4L, 9L, 9L, 7L, 7L, 5L, 1L,
6L, 8L, 7L, 5L, 5L, 5L, 1L, 4L, 6L, 8L, 4L, 4L, 6L, 6L, 7L,
4L, 9L, 9L, 3L, 7L, 9L, 6L, 6L, 9L, 8L, 6L, 8L, 2L, 7L, 6L,
2L, 1L, 5L, 8L, 7L, 8L, 2L, 9L, 3L, 2L, 7L, 3L, 8L, 4L, 7L,
7L, 2L, 1L, 2L, 7L, 9L, 5L, 6L, 2L, 5L, 2L, 5L, 3L, 2L, 2L,
7L, 4L, 4L, 5L, 4L, 2L, 8L, 6L, 8L, 7L, 9L, 8L, 3L, 3L, 7L,
7L, 9L, 8L, 2L, 3L, 2L, 8L, 2L, 2L, 1L, 1L, 5L, 2L, 7L, 7L
), levels = c("20", "21", "22", "23", "24", "25", "26", "27",
"28"), class = "factor"), valA = c(159.607723004788, 158.358008697342,
141.974330825281, 164.787855213382, 144.665812729937, 150.844110499649,
146.621952945049, 149.02119862436, 151.505544276012, 150.953287663976,
149.799259593061, 150.864581823536, 146.116518113227, 145.966262954497,
136.711207360681, 146.941330185009, 145.898797936978, 171.615128002758,
139.103070150482, 151.098049748469, 138.05099946147, 138.236514068506,
150.997619089576, 142.026886920928, 149.985419085562, 146.573928948593,
145.090627148404, 133.802577236647, 140.20201639712, 151.436131528943,
154.540964755388, 146.056981171572, 150.000503072523, 158.98311714704,
161.51884594381, 141.223089852753, 149.061443517999, 159.611987207358,
146.24216335547, 149.580244120488, 149.311141614103, 142.898567856749,
146.442527960922, 149.764440967294, 146.689049207537, 158.907088186946,
146.152057266768, 146.534647739194, 155.574900612417, 141.549052694633,
149.67441219879, 137.587641421219, 159.337356393885, 147.810834389007,
146.257237402622, 140.09398137611, 149.937903729781, 143.597742576387,
145.732061360397, 160.301401964677, 148.595793038063, 141.425740926795,
151.305655059739, 147.098092674976, 154.720108383899, 161.459375421848,
142.058459911124, 153.637202380642, 150.679184469428, 157.164524658116,
148.16177488843, 156.692952547685, 136.039553109306, 163.515671370507,
156.918223828149, 148.793792088914, 138.407942958887, 155.144069600336,
153.865550910518, 149.949154988629, 151.211647142899, 145.327128237202,
152.950453861042, 152.357234717756, 147.765925013259, 139.310106760855,
155.60599054752, 154.433572978192, 143.309547257589, 137.24329470395,
151.639668644701, 147.239296176217, 152.020893626916, 139.647980276124,
142.326636444957, 158.686198829439, 153.230199237726, 154.691900293754,
164.521827569232, 151.030571428819), valB = c(0, 0.600133159230071,
0.851397538207638, 1, 0.0869415205278437, 0.154743330311868,
0.288253581571964, 0.183783265376843, 0.306276883057253,
0.444386609697049, 0.139633384778004, 1, 0.532332423465664,
0.474767569848326, 0.648685892481378, 0.51122455583539, 0.460373588913227,
0.943036227065629, 0.434890936972369, 0.114919338772333,
0.615700367133021, 0.394546137941272, 0.343461171993119,
0.179560639793849, 0.628509770980008, 0.447794529671902,
0.654700318594409, 0.429690416808224, 0.302448972253469,
0.875070981223615, 0.418470885466581, 0.784385598762559,
0.139525270967319, 0.360165171087349, 0.419194581454046,
0.382710377560742, 0.904612103597514, 0.493170589610476,
0.573267755331035, 0.217288487640823, 0.281234817047128,
0.799420672566455, 0.877544499378668, 0.874659106643029,
0.085808885142401, 1, 0.805061848939862, 0.491984760758523,
0.711082333639478, 0.208584431254441, 0.171153127532343,
0.514715135281279, 0.140451243032666, 0.557005699567924,
0.8893117698814, 0.189837883110575, 0.278467773736081, 0.513969181835259,
0.194721164052168, 0.385014812034117, 0.761826623501419,
0.790863504191035, 0.615153999508128, 0, 0.48380097895215,
0.819431964301485, 0.743958511223481, 0.442755057768715,
0, 0.518289991640335, 0.672125509245073, 0.51374107391753,
0.547223762052763, 0.629469611860631, 0.381035079184936,
0.892993467725465, 0.641118019962183, 0.12719891882762, 0.91447263691566,
0.861337681102947, 0.747222189104564, 0.00121117934432169,
0.329208096918356, 0.690654145186858, 0.513116602273357,
0.604403691098392, 1, 0.254485902680099, 0, 0.582108581729124,
0.293720947626976, 0.63381231588856, 0.256284582862821, 1,
0.462888208526771, 0.356799348190984, 0.450121552554018,
0.758769015087929, 0.529202145560846, 0.0123149782366136)), class = "data.frame", row.names = c(NA,
-100L))