2010-09-28 12 views
5

est-il possible dans ggplot2 d'obtenir le type de tracé "b"? Voir par exemple:Obtenir le type de tracé R "b"

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

Idéalement, je veux remplacer points par leurs valeurs pour avoir quelque chose de semblable à cet exemple célèbre:

alt text

EDIT: Voici quelques exemples de données (je veux tracer chaque "chat" dans une facette avec le type de tracé "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))` 

Cordialement, Musa

+1

combiner geom.segment et geom.text, mais pourquoi voulez-vous utiliser ggplot2 si vous pouvez facilement faire cela de la manière normale de l'intrigue? –

+0

parce que j'ai besoin d'autres installations ggplot que je ne voulais pas mentionner, en se concentrant sur l'essentiel ... – teucer

+0

Quelques exemples de données aideraient vraiment à ce problème. – hadley

Répondre

3

Il y a une Grob expérimentale gridExtra pour mettre en œuvre ce dans les graphiques de la grille,

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

enter image description here

+0

@baptiste supposons que j'ai déjà un plot 'p', comment puis-je "l'ajouter" à l'intrigue (p + geom_barbed())? Je l'ai vu qu'il n'y a pas une telle fonction (geom_barbed) encore ... – teucer

+1

pour une raison quelconque, je ne l'ai pas inclus cette ligne dans le paquet, 'geom_barbed <- GeomBarbed $ build_accessor()' ce qui explique pourquoi 'geom_barbed 'n'est pas reconnu (pourquoi' qplot' travaillé est un mystère pour moi) – baptiste

+0

@baptiste Thx! Il fonctionne comme un charme. Voulez-vous mettre à jour le paquet? – teucer

4

Configurez les axes en dessinant le tracé sans aucun contenu.

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

Utilisez ensuite text pour faire vos points de données.

text(x, y, labels = y) 

Vous pouvez ajouter des segments de ligne avec lines.

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

EDIT: Échec total de la mention de ggplot dans la question. Essaye ça.

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 

AUTRE EDIT: Compte tenu de votre nouvel ensemble de données et demande, voici ce dont vous avez besoin.

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

ENCORE UNE AUTRE ÉDITION: Nous commençons à aborder une vraie question. Comme dans 'comment faites-vous que les lignes n'atteignent pas tout à fait les points'.

La réponse courte est que ce n'est pas une manière standard de le faire dans ggplot2. La bonne façon de le faire serait d'utiliser geom_segment et d'interpoler entre vos points de données. C'est beaucoup d'effort cependant, donc je suggère un fudge plus facile: dessinez de grands cercles blancs autour de vos points. L'inconvénient est que cela rend le quadrillage ridicule, alors vous devrez vous en débarrasser.

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 version ggplot n'est pas exactement ce que je voulais ... – teucer

+0

@Musa: La question est ambiguë. Vous demandez 'type =" b "' qui est des points et des lignes, mais l'image est du texte et des lignes, ce qui est ce que je vous ai donné. Posez une meilleure question et vous obtiendrez une meilleure réponse. –

+0

@Richie: tout d'abord merci pour votre effort. La question est d'avoir le type "b" dans ggplot, à la fin ce n'est pas grave s'il s'agit de points et de lignes ou de textes et de lignes.Je suppose que si j'ai le type, je pourrais remplacer des points avec des textes assez facilement (geom_point-> geom_text) – teucer