2012-09-27 53 views
5

para simplificar mis interacciones diarias de R, me gustaría configurar los colores predeterminados para todas mis tramas. Por ejemplo, digamos que yo quiero tener todas las parcelas hechas con líneas rojas (como en gnuplot ... :-))Cómo establecer un color de forma predeterminada en R para todas las llamadas de plot.default, plot o lines

Hasta ahora, he aquí un fragmento de mi .Rprofile

setHook(packageEvent("grDevices", "onLoad"), 
    function(...) 
     grDevices::X11.options(width = 14, height = 8, type = "Xlib", xpos = 600,  ypos = 30, canvas = "grey87")) 

suppressPackageStartupMessages(require(Defaults)) 
suppressPackageStartupMessages(require(utils)) 
suppressPackageStartupMessages(require(graphics)) 

setDefaults("plot.default",frame.plot=FALSE, type='l', col=2) 

Lo que hacer aquí es lo siguiente: cuando se carga el paquete grDevices (cargando el paquete graphics), llamo al X11.options con mis parámetros preferidos: un cuadro más ancho, fondo gris claro, llamadas xlib (porque estoy haciendo llamadas distantes, y cairo en mi entorno actual es demasiado lento (otro problema para resolver)) Luego cargo silenciosamente 3 paquetes, Defaults, utils y graphics. El segundo es necesario para evitar un mensaje de error de función find.

Finalmente, la función mágica setDefaults establece 3 parámetros para la función de diagrama de dispersión plot.default. El tercer parámetro col no es un parámetro de plot.default, sino uno de la función par().

Pero, al hacer una llamada setDefaults con par tampoco funciona.

Cualquier solución es bienvenida ...

+0

'palette' .... y definir los valores predeterminados en' plot.xy '... –

+0

(esto es un poco más complicado de lo que pensé - plot.xy tiene algunas arrugas que hacen que funcione mal con setDefaults - pero sigo pensando que es la pista correcta) –

+1

¿No puedes simplemente poner' par (col = "rojo") 'en su .Rprofile? –

Respuesta

6

Puede usar el gancho "plot.new" para establecer los valores predeterminados de par cada vez que se abre un nuevo marco de gráficos. (Funcionamiento del gancho se documentan en ?plot.new y ?setHook)

En su caso, basta con añadir esta línea a su .Rprofile:?

setHook("plot.new", function() par(col = "red")) 
+0

sí !!!! Eso fue tan simple de hecho. Muchas gracias por su respuesta, eso es exactamente lo que necesito. –

+0

Hola Googl .., si está analizando esta página, aquí están los ganchos para hacer en R para tener buenos gráficos, gracias a la ayuda de los usuarios de stackoverflow: 'setHook (packageEvent (" grDevices "," onLoad "), función \t (...) grDevices :: X11.options (width = 14, height = 8, type = "Xlib", xpos = 600, ypos = 30, canvas = "grey87")) 'y luego puede agregar esto también:' suprimirPaqueteMensajes de inicio de sesión (requerir (predeterminados)) suppressPackageStartupMessages (require (utils)) suppressPackageStartupMessages (require (gráficos)) setHook ("plot.new", la función() par (col = "red")) setDefaults ("plot.default", frame.plot = FALSE, type = 'l') ' –

+0

Obteniendo esto bajo el polvo. Estoy intentando esto, pero por alguna razón el color rojo solo se aplica a las etiquetas de mi leyenda. ¿Algunas ideas? –

3

Los parámetros como el color se han establecido en función de cada dispositivo, por lo que cuando se cierra un dispositivo y crear uno nuevo todos los parámetros se ajustan a sus valores por defecto. Para ello me gustaría crear su propia función de dispositivo que se abre a continuación, el dispositivo establece los parámetros, algo así como:

mydev.new <- function(...) { 
    dev.new(...) 
    par(col='red') 
} 

Se podría, obviamente, reemplazar dev.new con x11 o algo más, pero esto es probablemente el más portátil. Ahora puede abrir un nuevo dispositivo usando mydev.new y el color predeterminado se establecerá en rojo.

Además, si se ejecuta el comando

options(device=mydev.new) 

Entonces, cuando usted no tiene un dispositivo de gráficos abierto y ejecuta un comando de trazado, su función será la dirigida a abrir un nuevo dispositivo de trazado y así el valor predeterminado será rojo en ese caso también. Puede expandir la función mydev.new (o lo que quiera llamar) para establecer otras opciones, tomar argumentos, etc. para casos diferentes con los que desee trabajar.

Cuestiones relacionadas