varias superponer studio modificar los lineas graficos graficas ggplot escala ejes como cambiar r plot axis

superponer - Crear un diagrama de líneas con escala de tiempo y etiquetas en r



superponer graficas en r ggplot (4)

Aquí hay algunas mejoras (sugiero agregar 0 por ahora solo para hacer bien la escala):

myd <- data.frame (period = c("Triassic", "Jurasic", "Cretaceous", "Cenzoic", "now"), myears = c(245, 208, 145, 65, 0), label = c(226, 176,105, 32, NA )) myd2 <- data.frame (event = c("Diansaurs_strt", "Birds", "Diansaurs_ext", "Human"), myears = c(235, 200, 60, 0.5)) myd2$x <- -0.25 with (myd2, plot(x,myears,ylim=c(0,250), xlim = c(0, 10), axes=F,xlab="",ylab="",type="p",pch=17, col = "green")) with (myd2, plot(x,myears,ylim=c(0,250), xlim = c(0, 10), axes=F,xlab="",ylab="",type="p",pch="-", col = "green")) with (myd2,text(x,myears,event,pos=4,xpd=T), col = "green") axis(side=2,at = myd$label, labels = myd$period, tick = FALSE, las = 2, col = "green", ) axis(side=2,at = myd$myears, labels = myd$myears, las = 2, col = "green")

Quedan pocos problemas para cambiar el oriantation de la flecha (creo que de alguna manera puedes encontrar <- symbol, pero no sé cómo hacerlo).

Intento crear la trama de la siguiente manera (muchas veces termino dibujando una trama como esta a mano, pero esta vez quiero trazarla yo mismo).

Aquí están mis datos y mi prueba:

myd <- data.frame (period = c("Triassic", "Jurasic", "Cretaceous", "Cenzoic"), myears = c(245, 208, 145, 65), label = c(226, 176,105, 32 )) myd2 <- data.frame (event = c("Diansaurs_strt", "Birds", "Diansaurs_ext", "Human"), myears = c(235, 200, 60, 0.5)) myd2$x <- -0.25 with (myd2, plot(x,myears,ylim=c(0,250), xlim = c(0, 10), axes=F,xlab="",ylab="",type="p",pch=17)) with (myd2,text(x,myears,event,pos=4,xpd=T)) axis(side=2,at = myd$label, labels = myd$period)

Tengo problemas particularmente coincidencia de eje con la trama y la orientación de texto y puntos. Cualquier otra idea o ayuda de mejora apreciada.


Para construir nuevas tramas "desde la base", y para un control máximo sobre elementos gráficos individuales, el sistema gráfico de la cuadrícula es difícil de superar:

library(grid) ## Set up plotting area with reasonable x-y limits ## and a "native" scale related to the scale of the data. x <- -1:1 y <- extendrange(c(myd$myears, myd2$myears)) dvp <- dataViewport(x, y, name = "figure") grid.newpage() pushViewport(dvp) ## Plot the central timeline grid.lines(unit(0, "native"), unit(c(0,245), "native"), gp = gpar(col="dodgerblue")) ## Annotate LHS grid.segments(x0=0.5, x1=0.47, y0=unit(c(0, myd$myears), "native"), y1=unit(c(0, myd$myears), "native"), gp=gpar(col="dodgerblue")) grid.text(label=c(0, myd$myears), x=0.44, y=unit(c(0, myd$myears), "native")) grid.text(label=myd$period, x=0.3, y=unit(myd$label, "native"), just=0, gp=gpar(col="dodgerblue", fontface="italic")) ## Annotate RHS ## Create a function that plots a pointer to the specified coordinate pointer <- function(x, y, width=1) { grid.polygon(x = x + unit(width*(c(0, .1, .1)), "npc"), y = y + unit(width*(c(0, .03, -.03)), "npc"), gp = gpar(fill="dodgerblue", col="blue", lwd=2)) } ## Call it once for each milestone for(y in myd2$myears) { pointer(unit(.5, "npc"), y=unit(y, "native"), width=0.3) } ## Or, if you just want blue line segments instead of those gaudy pointers: ## grid.segments(x0=0.5, x1=0.53, ## y0=unit(c(myd2$myears), "native"), ## y1=unit(c(myd2$myears), "native"), gp=gpar(col="dodgerblue")) grid.text(label=myd2$event, x=0.55, y=unit(myd2$myears, "native"), just=0)


Para dibujar los triángulos, mira las funciones my.symbols y ms.polygon en el paquete TeachingDemos.

En el gráfico de la derecha arriba, los dinosaurios se mueven hacia arriba, si desea esto en general (moviendo etiquetas que de otro modo estarían demasiado cerca o superpuestas), entonces mire la función spread.labs en el paquete TeachingDemos.

Algunas otras funciones posibles que podrían ayudar con la trama son text , grconvertX , grconvertY , grconvertY , segments y axis .


Puedes probar algo como esto para que comiences:

myd <- data.frame(period = c("", "Triassic", "Jurasic", "Cretaceous", "Cenzoic", ""), myears = c(260, 245, 208, 145, 65, -5), label = c(260, 226, 176,105, 32, -5)) myd2 <- data.frame(event = c("Dinosaurs_strt", "Birds", "Dinosaurs_ext", "Human"), myears = c(235, 200, 60, 0.5)) myd2$x <- 1 with(myd2, plot(x, myears, ylim = c(-5, 250), xlim = c(0, 10), axes = FALSE, xlab = "", ylab = "", type = "n")) with(myd2, text(x, myears, event, pos = 4, xpd = TRUE)) axis(side = 2, at = myd$label, labels = myd$period, las = 2) X0 <- rep(myd2$x, 4) Y0 <- myd2$myears X1 <- rep(-.25, 4) Y1 <- Y0 arrows(X0, Y0, X1, Y1)

Agregué un elemento vacío adicional al inicio y al final de sus datos en "myd" para ayudar con el eje. Entonces, en lugar de usar pch , he usado arrows para hacer coincidir las etiquetas de la derecha con el eje.

Algunos ajustes probablemente podrían hacer que se vea mucho mejor.