2010-09-28 19 views
5

¿Hay alguna forma en ggplot2 para obtener el tipo de trazado "b"? Ver ejemplo:Obtención del tipo de trazado R "b"

x <- c(1:5) 
y <- x 
plot(x,y,type="b") 

Idealmente, quiero reemplazar los puntos por sus valores a tener algo similar a este ejemplo famoso:

alt text

EDIT: Aquí algunos datos de ejemplo (Quiero trazar cada "cat" en una faceta con el tipo de trama "b"):

`df <- data.frame(x=rep(1:5,9),y=c(0.02,0.04,0.07,0.09,0.11,0.13,0.16,0.18,0.2,0.22,0.24,0.27,0.29,0.31,0.33,0.36,0.38,0.4,0.42,0.44,0.47,0.49,0.51,0.53,0.56,0.58,0.6,0.62,0.64,0.67,0.69,0.71,0.73,0.76,0.78,0.8,0.82,0.84,0.87,0.89,0.91,0.93,0.96,0.98,1),cat=rep(paste("a",1:9,sep=""),each=5))` 

Regards, Musa

+1

combinar geom.segment y geom.text, pero ¿para qué usar ggplot2 si se puede fácilmente hacer eso en la forma de la trama normal? –

+0

porque necesito algunas otras instalaciones ggplot que no quería mencionar, concentrándome en lo esencial ... – teucer

+0

Algunos datos de muestra realmente ayudarían con este problema. – hadley

Respuesta

3

Hay un Grob experimental en gridExtra implementar esto en la cuadrícula de gráficos,

library(gridExtra) 
grid.newpage() ; grid.barbed(pch=5) 

enter image description here

+0

@baptiste supongamos que ya tengo una trama 'p', ¿cómo puedo "agregarla" a la trama (p + geom_barbed())? He visto que no existe tal función (geom_barbed) sin embargo ... – teucer

+1

por alguna razón no he incluido esta línea en el paquete, 'geom_barbed <- GeomBarbed $ build_accessor()' que explica por qué 'geom_barbed 'no se reconoce (por qué' qplot' trabajado es un misterio para mí) – baptiste

+0

@baptiste Thx! Funciona a las mil maravillas. ¿Vas a actualizar el paquete? – teucer

4

Configure los ejes dibujando la trama sin ningún contenido.

plot(x, y, type = "n") 

Luego use text para hacer sus puntos de datos.

text(x, y, labels = y) 

Puede añadir segmentos de línea con lines.

lines(x, y, col = "grey80") 

EDIT: Totalmente no pudo reloj de la mención de ggplot en la pregunta. Prueba esto.

dfr <- data.frame(x = 1:5, y = 1:5) 
p <- ggplot(dfr, aes(x, y)) + 
    geom_text(aes(x, y, label = y)) + 
    geom_line(col = "grey80") 
p 

ANOTHER EDIT: Dado su nuevo conjunto de datos y solicitud, esto es lo que necesita.

ggplot(df, aes(x, y)) + geom_point() + geom_line() + facet_wrap(~cat) 

YET ANOTHER EDIT: Estamos empezando a acercarnos a una pregunta real. Como en '¿Cómo haces para que las líneas no lleguen a los puntos'?

La respuesta corta es que esa no es una forma estándar de hacer esto en ggplot2. La forma correcta de hacerlo sería usar geom_segment e interpolar entre sus puntos de datos. Sin embargo, esto es un gran esfuerzo, por lo que sugiero un dulce de azúcar más fácil: dibuja grandes círculos blancos alrededor de tus puntos. La desventaja de esto es que hace que las líneas de la cuadrícula parezcan tontas, por lo que tendrás que deshacerte de ellas.

ggplot(df, aes(x, y)) + 
    facet_wrap(~cat) + 
    geom_line() + 
    geom_point(size = 5, colour = "white") + 
    geom_point() + 
    opts(panel.background = theme_blank()) 
+0

la versión de ggplot no es exactamente lo que quería ... – teucer

+0

@Musa: La pregunta es ambigua. Pides 'type =" b "' que son puntos y líneas, pero la imagen es texto y líneas, que es lo que te di. Haga una pregunta mejor y obtendrá una mejor respuesta. –

+0

@Richie: antes que nada por tu esfuerzo. La cuestión es tener el tipo "b" en ggplot, al final no importa si se trata de puntos y líneas o textos y líneas.Supongo que si tengo el tipo, podría reemplazar los puntos con textos con bastante facilidad (geom_point-> geom_text) – teucer

Cuestiones relacionadas