r data-visualization r-grid sparklines tufte

R YaleToolkit: ¿Cómo cambiar el tamaño de fuente de las etiquetas de tick en los sparklines?



data-visualization r-grid (1)

Bueno, las sparklines dependen en gran medida del paquete de grid , por lo que debe profundizar para buscar esos parámetros de tamaño de fuente. Jugar con el viewpoint probablemente te lleve allí. Para una solución fácil (pero MUY ''sin procesar''), solo use las opciones de trazado simples usando par . De esta manera puede manipular casi todos los parámetros con mucha facilidad:

x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(10)) par(mfrow=c(5,1),mar=c(1,0,0,0),oma=c(4,5,4,4)) plot(x$V,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7) plot(x$W,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7) plot(x$X,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7) plot(x$Y,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7) plot(x$Z,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7) axis(1,pos=c(-2))

Estoy usando esta función para algunas chispas rápidas y fáciles con R, pero parece que no consigo resolver cómo cambiar el tamaño de fuente para evitar superposiciones feas de las etiquetas de marca del eje y. Aquí está mi código (ver más abajo para un ejemplo reproducible):

sparklines(gamma.df, sub=c(1:23),outer.margin = unit(c(2, 2, 2, 2), "cm"))

y la trama resultante:

Parece que soy capaz de suprimir completamente el eje y con

sparklines(gamma.df, sub=c(1:23),yaxis=FALSE,outer.margin = unit(c(2, 2, 2, 2), "cm"))

Pero lo que realmente quiero es simplemente reducir los números en las marcas de verificación (y agregar relleno gris debajo de la línea, pero parece que tendría que dibujar polígonos en la pantalla, lo que probablemente sea suficiente problema para merecer una pregunta separada ... y un paquete diferente).

La documentation sugiere que gpar podría ser relevante: "En todos los casos en los que se necesita una lista de parámetros gráficos, los nombres de parámetros válidos son los mismos que serían válidos cuando se pasan a gpar en la llamada correspondiente". Pero necesito un poco de ayuda para entenderlo, ya que ninguno de mis intentos parece llegar a ningún lado (ídem para cex.axis y axis ()). ¿Algún experto en gráficos de grid de R por ahí? Los enlaces a un enfoque completamente diferente y bien documentado (ggplot2?) Que ofrece una salida de estilo de línea de brillo de mejor calidad también son bienvenidos.

Aquí hay algunos datos de ejemplo y código que reproduce mi problema:

x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(10)) sparklines(x,outer.margin = unit(c(2, 2, 2, 2), "cm"))

Y aquí está el diagrama de datos de ejemplo resultante con números superpuestos feos en las marcas de verificación del eje y:

ACTUALIZACIÓN : utilizando el muy útil código de plot de @ geek-on-acid y algo de código del foro de Tufte (ver a continuación), he encontrado un método alternativo de sparkline que no usa el paquete YaleToolkit y se ve bien ... Aquí hay un ejemplo reproducible (en realidad solo dos líneas, pero anotado aquí para mi educación):

x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(1000)) # get a bit of data par(mfrow=c(ncol(x),1), #sets number of rows in space to number of cols in data frame x mar=c(1,0,0,0), #sets margin size for the figures oma=c(4,5,4,4)) #sets outer margin for (i in 1:ncol(x)){ # setup for statement to loops over all elements in a list or vector plot(x[,i], #use col data, not rows from data frame x col="grey",lwd=0.5, #make the line grey and thin axes=F,ylab="",xlab="",main="",type="l"); #suppress axes lines, set as line plot axis(2,yaxp=c(min(x[,i]),max(x[,i]),2), # y-axis: only show tickmarks for max and min values of col cex.axis=1.1,las=1, # shrink fontsize slightly, make text horizontal for easy reading at=c(round(min(x[,i]),3),round(max(x[,i]),3))); #specify where tickmark numbers go and round them to keep it tidy axis(2,yaxp=c(min(x[,i]),max(x[,i]),2),col="white",tcl=0,labels=FALSE) #y-axis: put a 2nd white axis line over the 1st y-axis to make it invisible ymin<-min(x[,i]); tmin<-which.min(x[,i]);ymax<-max(x[,i]);tmax<-which.max(x[,i]); # see the code from Jason below for what these do points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=1) # add coloured points at max and min } axis(1,pos=c(-5)) # places horizontal axis at the bottom of it all.

Aquí está la imagen resultante, que es básicamente la solución a mi problema. Las marcas de verificación del eje y intentan ser elegantes al mostrar solo los valores máximo y mínimo de los datos y no tener una línea vertical. Gracias de nuevo a @ geek-on-acid por la sugerencia sobre cómo obtener un solo eje x en la parte inferior de todos ellos.

Finalmente, para completar, incluyo un código de líneas de chispa más cercano al estilo de Tufte por Jason Dieterle que encontré en el foro de Tufte . Se ven mucho mejor que el mío, pero el código solo hace una trama a la vez. Aquí está la publicación original:

#Here is a simple R implementation of sparklines. Running sparkline() will generate a random sparkline; running sparkline(yourdata) will generate a sparkline using the data in yourdata. As an example, here is Google''s stock price for the last year. #R sparklines sparkline<-function(ydata=rnorm(100,500,50),width=1.5,height=0.5,sigfigs=4) { # ydata = vector of data to be plotted # width = width of sparlkline in inches, including text # height = height of sparkline in inches # sigfigs = number of significant figures to round min, max, and last values to temppar<-par(no.readonly = TRUE) # store default graphics parameters par(mai=c(0.10,0.05,0.10,0.05),fin=c(width,height)) # adjust graphics parameters for sparklines len<-length(ydata) # determine the length of the data set ymin<-min(ydata) # determine the minimum tmin<-which.min(ydata) # and its index ymax<-max(ydata) # determine the maximum tmax<-which.max(ydata) # and its index yfin<-signif(ydata[len],sigfigs) #determine most recent data point plotrange=c(ymin-0.3*(ymax-ymin),ymax+0.3*(ymax-ymin)) # define plot range to leave enough room for min and max circles and text plot(x=1:len,y=ydata,type="l",xlim=c(1,len*1.5),ylim=plotrange,col="gray",lwd=0.5,ann=FALSE,axes=FALSE) # plot sparkline points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=0.5) # plot min and max points text(x=len,y=ymin,labels=signif(ymin,sigfigs),cex=0.5,pos=4,col="red") # show minimum value text(x=len,y=ymax,labels=signif(ymax,sigfigs),cex=0.5,pos=4,col="blue") # show maximum value text(x=len,y=(ymin+ymax)/2,labels=yfin,cex=0.5,pos=4) # show most recent value par(temppar) # restore graphics defaults } #-- Jason Dieterle (email), January 28, 2008

y así es como se ve su salida (ampliada un poco):

Además del paquete YaleToolkit, está el paquete sparkTable que aprendí en stats.stackexchange pero no lo he probado. R-forge tiene una entrada para otro paquete para hacer sparklines, pero este parece no ser activo o útil.