varias personalizar los lineas leyendas graficos grafico graficas ggplot escala ejes ejemplos como cambiar barras barplot r plot typography

los - personalizar ejes en r



Fix tipografía en etiquetas de ejes (4)

Preámbulo: quiero crear gráficos de grado de publicación de R sin postprocesamiento. Otros investigadores de mi instituto siempre realizan postprocesamiento en un software de gráficos (como Adobe Illustrator). Espero evitar esto.

Mi única queja es que R no usa el signo menos correcto para los números negativos (especialmente en los ejes de la trama):

plot(-20:-1, rnorm(20) + 1 : 20)

(He marcado con un círculo a los ofensores para su consideración).

Como algo así como un nerd de tipografía (¡es verdad! ¡Verifique mi CV de Carreras!) Esto es inaceptable. Necesito usar el caracter Unicode correcto ᴍɪɴᴜꜱ ꜱɪɢɴ (U + 2212, "-") aquí. Un amigo mío logra esto reemplazando todos los signos menos en Adobe Illustrator antes de la publicación, pero no puedo evitar pensar que debe haber una forma mejor, desde dentro de R, para lograr esto; y uno que no me obliga a reemplazar manualmente todas las etiquetas de ejes.

(Actualmente no estoy usando ggplot2, pero si hay una solución que solo funciona con ggplot2 lo tomaré gustosamente).


Otra forma que es casi la misma que la proporcionada por Joshua Ulrich, excepto que puedes dejar que R calcule los tics del eje:

plot(-20:-1, rnorm(20) + 1 : 20, xaxt="n") at <- axTicks(1, usr=par("usr")[1:2]) labs <- gsub("-", "/U2212", print.default(at)) axis(1, at=at, labels=labs)


Tal vez dibujar el eje y las etiquetas de forma manual, en lugar de aceptar los valores predeterminados?

plot(-20:-1, rnorm(20) + 1 : 20, xaxt="n") Axis(-20:-1, at=seq(-20,-5,5), side=1, labels=paste("/U2212",seq(20,5,-5),sep=""))


Aquí es cómo hacerlo con ggplot. El dispositivo pdf no representa los símbolos Unicode, por lo tanto, use cairo_pdf .

unicode_minus <- function(x) sub(''^-'', ''/U2212'', format(x)) # change the default scales scale_x_continuous <- function(..., labels=unicode_minus) ggplot2::scale_x_continuous(..., labels=labels) scale_y_continuous <- function(..., labels=unicode_minus) ggplot2::scale_y_continuous(..., labels=labels) qplot(-20:-1, rnorm(20) + 1:20)


Aquí hay un truco que corrige las etiquetas de los ejes de las tramas de celosía . La idea es insertar código en el panel.axis() funciones de bajo panel.axis() que es llamado por la mayoría / todas las funciones de trazado de nivel superior.

Aquí (con un par de líneas de contexto arriba y abajo) está el código que insertaría "a mano" después de una llamada a la library(lattice); trace("panel.axis", edit=TRUE) library(lattice); trace("panel.axis", edit=TRUE) :

if (draw.labels && !is.null(labels)) { { labels <- gsub("-", "/U2212", labels) ## <- My addition Encoding(labels) <- "UTF-8" ## <- My addition just <- if (outside) switch(side, bottom = if (rot[1] == 0) c("centre",

Una mejor opción (una vez que haya adivinado el valor correcto del argumento at= ( y vea aquí varias formas de hacerlo )) es ejecutar esto:

library(lattice) trace(what = "panel.axis", tracer = quote({labels <- gsub("-", "/U2212", labels) Encoding(labels) <- "UTF-8"}), at = list(c(30,3,2,2)))

A continuación, se muestran los signos de menos apropiados en las etiquetas de marca en cualquiera de los muchos dispositivos de gráficos de pantalla o archivo que he comprobado

Para comparar en su propio dispositivo de pantalla, ejecute el bloque de código directamente arriba y luego:

xyplot(1:10 ~ -1:-10) untrace("panel.axis") windows() xyplot(1:10 ~ -1:-10)