varias tamaño superponer studio los lineas leyenda graficos graficas ggplot escala ejes como cambiar barplot r resize axis-labels

superponer - ¿Cómo ajustar automáticamente las etiquetas del eje de las figuras R al tamaño de la matriz?



tamaño de la leyenda en r (2)

Quiero hacer que el tamaño de fuente de las etiquetas del eje y sea ajustable al tamaño de datos de entrada en el eje y como en la figura 3, en contraste con la situación actual en la figura 1-2 donde las etiquetas no están al lado de las líneas correspondientes . Código

library("corrgram") # https://stackoverflow.com/a/40387233/54964 ids <- seq(1,18) x_at <- seq(0.075, 0.925, length.out = length(ids)) y_at <- seq(0.075, 0.91, length.out = length(ids)) createLabels <- function(xlab, ylab, x_labels, y_labels){ ids <- y_labels # assume here x_at <- seq(0.075, 0.925, length.out = length(ids)) y_at <- seq(0.075, 0.91, length.out = length(ids)) mtext(xlab, side = 1, line = 4) mtext(ylab, side = 2, line = 3) axis(1, at=x_at, labels=x_labels, line = 1.5, tick=F, cex.axis=.7) axis(2, at=y_at, labels=y_labels, line = 1, tick=F, cex.axis=.7, las=1) # horizontal y-axis labels; rawr } corrgram(baseball,main="Baseball data PC2/PC1 order") createLabels(xlab="Patient 1 ID", ylab="Patient 2 ID", x_labels=ids, y_labels=ids)

Fig. 1 Salida con la base de datos de prueba limitada, Fig. 2 Salida con la caja real, Fig. 3 Salida esperada

Salida esperada: tamaño de letra de etiqueta ajustable automáticamente al tamaño de datos de entrada en el eje y; ejemplo de la salida creada por makeMatrixPlot(list, ids, title) encuentra aquí en la Fig. 3

Prueba de la respuesta de Istrel con un gran conjunto de datos donde ID largos

Complete el código aquí que se visualiza correctamente pero le da a la parte trasera salidas extrañas y NULL s, aquí algunos puntos clave sobre parámetros optimizados

# https://stackoverflow.com/a/40485734/54964 cex_lab<-0.9 # little smaller fontsize for matrix >= 20x20 oma<-c(4, 4, 6, 4) gap<-0 las<-2 # both axis labels always perpendicular

Complicaciones de salida como la advertencia y muchos NULL

In max(l.wid) : no non-missing arguments to max; returning -Inf

[[1]] [[1]][[1]] NULL ... [[1]][[7]] NULL [[2]] [[2]][[1]] NULL ... [[2]][[7]] NULL [[3]] [[3]][[1]] NULL ... [[3]][[7]] NULL

Llámalo, por ejemplo, por

library("corrplot") library("psych") ids <- seq(1,11) M.cor <- cor(mtcars) colnames(M.cor) <- ids rownames(M.cor) <- ids p.mat <- psych::corr.test(M.cor, adjust = "none", ci = F) p.mat <- p.mat[["r"]] corrplot(M.cor, method = "color", type = "upper", tl.col = ''black'', diag = TRUE, p.mat = p.mat, sig.level = 0.0000005 ) createLabels(xlab="Patient 1 ID", ylab="Patient 2 ID and Ages", x_labels=ids, y_labels="")

R: 3.3.1
Objetos gráficos usados: corrplot , corrgram , ...
Sistema operativo: Debian 8.5


Corrgram usa mfrow de par() para el dibujo de cuadrados. Podemos usar eso para etiquetar. El número de etiquetas debe ser igual al número de columnas en la matriz. Si configura los argumentos oma o gap en la función corrgram , debe especificar los mismos parámetros en la función createLabels .

Por cierto, si usa corrgram sin argumento main , necesitará oma=c(4,4,4,4) en createLabels

createLabels <- function(xlab, ylab, x_labels, y_labels, cex_lab=1.3, oma=c(4, 4, 6, 4), gap=0, las=0){ # oma and gap args same as in corrgram nc <- length(x_labels) # get number of columns # Inititate mfrow partition as in corrgram opar <- par(mfrow = c(nc, nc), mar = rep.int(gap/2, 4), oma = oma) #save old par parameters # Create matrix of outer cells indexes and positions left_side <- matrix(c(nc:1, rep(1, nc), rep(2, nc)), nc) bottom_side <- matrix(c(rep(nc, nc), 1:nc, rep(1, nc)), nc) sides <- rbind(left_side, bottom_side) # Dublicate labels vector labels <- c(y_labels, x_labels) # Loop over each outer cell for (i in c(1:(nc*2))){ cell_ind <- sides[i, ] par(mfg=c(cell_ind[1], cell_ind[2], nc, nc)) # set current plotting cell usr<-par("usr") clip(usr[1], -2, usr[3], usr[4]) # alter clipping region axis(cell_ind[3], at=0.5, labels=labels[i], outer=TRUE, xpd=NA, lwd=NA, mgp=c(3,0,0.2), cex.axis=cex_lab, las=las) } # Add labels par(opar) mtext(xlab, side = 1, line = -1.5, outer=TRUE, xpd=NA) mtext(ylab, side = 2, line = -1.5, outer=TRUE, xpd=NA) } corrgram(baseball,main="Baseball data PC2/PC1 order") createLabels(xlab="Patient 1 ID", ylab="Patient 2 ID", 1:18, 1:18)


El paquete de corrgram se ha actualizado (versión 1.11) con un mejor soporte para las etiquetas a lo largo de los ejes. Utilicé la idea básica de Leo y la agregué al paquete. Por ejemplo:

require(corrgram) labs=colnames(state.x77) corrgram(state.x77, oma=c(7, 7, 2, 2), outer.labels=list(bottom=list(labels=labs,cex=1.5,srt=60), left=list(labels=labs,cex=1.5,srt=30))) mtext("Bottom", side=1, cex=2, line = -1.5, outer=TRUE, xpd=NA) mtext("Left", side=2, cex=2, line = -1.5, outer=TRUE, xpd=NA)