plots - text in r
Trazando una grilla detrĂ¡s de los datos, no al frente en R (5)
¡De hecho, R tiene una manera de hacer esto! Es el panel.first
argumento para plot.default
, que hist
llama para hacer la mayor parte del trabajo. Se necesita una expresión que se evalúa "después de configurar los ejes de la gráfica pero antes de que tenga lugar cualquier trazado. Esto puede ser útil para dibujar las cuadrículas de fondo o el diagrama de dispersión suaviza", para citar de ?plot.default
.
hist(WindSpeed, breaks=c(0:31), freq=TRUE, col="blue", xaxt="n", yaxt="n",
xlab="Wind Speed (m/s)", main="Foo",
cex.main=1.5, cex.axis=1, cex.lab=1, tck=1, font.lab=2,
panel.first={
axis(1, tck=1, col.ticks="light gray")
axis(1, tck=-0.015, col.ticks="black")
axis(2, tck=1, col.ticks="light gray", lwd.ticks="1")
axis(2, tck=-0.015)
minor.tick(nx=5, ny=2, tick.ratio=0.5)
box()
})
Consulte ¿Cómo se dibujan las líneas de división usando abline () que están detrás de los datos? para otra pregunta que usa este método.
Me gusta producir mis propias líneas de cuadrícula al trazar para poder controlar las marcas, etc. y estoy luchando con la rutina de trazar "hist".
hist(WindSpeed, breaks=c(0:31), freq=TRUE, col="blue", xaxt="n", yaxt="n", xlab="Wind Speed (m/s)",main="Foo", cex.main=1.5, cex.axis=1, cex.lab=1, tck=1, font.lab=2)
axis(1, tck=1, ,col.ticks="light gray")
axis(1, tck=-0.015, col.ticks="black")
axis(2, tck=1, col.ticks="light gray", lwd.ticks="1")
axis(2, tck=-0.015)
minor.tick(nx=5, ny=2, tick.ratio=0.5)
box()
Trama:
Luego pude usar el comando "líneas" o "puntos" para volver a copiar los datos sobre otros tipos de gráficos, pero con el histograma no es tan fácil.
Cualquier ayuda sería genial.
Agregué mi código debajo y la imagen basada en la respuesta de John ...
Agregué mi código debajo y la imagen basada en la respuesta de John ...
hist(WindSpeed, breaks=30, freq=TRUE, col="blue", xaxt="n", yaxt="n", xlab="Wind Speed (m/s)",main="Foo", cex.main=1.5, cex.axis=1, cex.lab=1, font.lab=2)
axis(1, tck=1, col.ticks="light gray")
axis(1, tck=-0.015, col.ticks="black")
axis(2, tck=1, col.ticks="light gray", lwd.ticks="1")
axis(2, tck=-0.015)
minor.tick(nx=5, ny=2, tick.ratio=0.5)
box()
hist(WindSpeed, add=TRUE, breaks=30, freq=TRUE, col="blue", xaxt="n", yaxt="n", xlab="Wind Speed (m/s)", main="Foo", cex.main=1.5, cex.axis=1, cex.lab=1, font.lab=2)
En R, el orden importa cuando tramas. Como has descubierto, agregar cosas a un gráfico se suma a lo que has trazado anteriormente. Entonces, necesitamos una forma de trazar la cuadrícula primero y luego el histograma. Pruebe algo como esto:
plot(1:10,1:10,type = "n")
grid(10,10)
hist(rnorm(100,5,1),add = TRUE)
No he vuelto a crear su ejemplo, ya que no es reproducible, pero esta idea general debería funcionar. Pero la idea clave es crear un gráfico vacío con las dimensiones correctas utilizando la opción type = "n"
para plot
, luego agregar la cuadrícula, luego agregar el histograma usando el argumento add = TRUE
.
Tenga en cuenta que el argumento add
es en realidad para plot.histogram
, hist
pasa a través de ...
Esto es relativamente fácil.
Genera el histograma pero no lo tramas.
h <- hist(y, plot = FALSE)
Ahora genere su trama base ... He agregado algunas características para que se vea más como un historgrama estándar
plot(h$mids, h$counts, ylim = c(0, max(h$counts)), xlim = range(h$mids)*1.1,
type = ''n'', bty = ''n'', xlab = ''y'', ylab = ''Counts'', main = ''Histogram of y'')
agrega tu cuadrícula
grid()
agrega tu histograma
hist(y, add = TRUE)
O, como descubrí a través de este proceso ... puedes hacerlo aún más fácil
hist(y)
grid()
hist(y, add = TRUE, col = ''white'')
Este último método simplemente está redibujando el histograma sobre la cuadrícula.
La solución de gráficos base sugerida por @joran está bien. Alternativas:
d <- data.frame(x=rnorm(1000))
library(lattice)
histogram(~x,data=d,panel=function(...) {
panel.grid(...)
panel.histogram(...) }
)
O:
library(ggplot2)
qplot(x,data=d,geom="histogram",binwidth=0.1)+theme_bw()+
labs(x="Wind speed", y="Frequency")
(Pero, por supuesto, tendrás que aprender todos los detalles de ajustar etiquetas, títulos, etc. ... No estoy seguro de cómo hacer títulos en ggplot
...)
Otros métodos para líneas de cuadrícula en segundo plano:
UN)
hist( y, panel.first=grid() ) # see: help( plot.default )
box()
SEGUNDO)
plot.new() # new empty plot
nv <- length( pretty(x) ) - 1 # number of vertical grid lines (or set by hand)
nh <- length( pretty(y) ) - 1 # number of horizontal grid lines (or set by hand)
grid( nx = nv, ny = nh ) # preplot grid lines
par( new = TRUE ) # add next plot
plot( x, y ) # plot or hist, etc
box() # if plot hist
Líneas arbitrarias en el fondo con abline:
DO)
¿Cómo dibujo las líneas de la cuadrícula usando abline () que están detrás de los datos?
RE)
# first, be sure there is no +/-Inf, NA, NaN in x and y
# then, make the container plot with two invisible points:
plot( x = range( pretty( x ) ), y = range( pretty( y ) ), type = "n", ann = FALSE )
abline( h = hlines, v = vlines ) # draw lines. hlines, vlines: vectors of coordinates
par( new = TRUE ) # add next plot. It is not necessary with points, lines, segments, ...
plot( x, y ) # plot, hist, etc
box() # if plot hist