2012-06-19 7 views
7

0,9,9'da düzgün çalıştı, ancak 0.9.1'de olmayan bazı ggplot kodları var. Karakter xintercept ile geom_vline

ben theDF verileri çizmek için gidiyorum ve sadece theDF oluşturmak için kullanılır xintercept="2010 Q1." theGrid bir dikey çizgi çizmek istiyorum. Bu ggplot2 0.8.9 Ar 2.13.2 iyi çalıştı, yine

g <- ggplot(theDF, aes(x=YrQtr, y=Minutes)) + 
     geom_point() + 
     opts(axis.text.x=theme_text(angle=90)) 

g + geom_vline(data=data.frame(Vert="2010 Q2"), aes(xintercept=Vert)) 

ancak ggplot2 0.9.1 ile 2.14+ R değildir: kullanılan

theGrid <- expand.grid(2009:2011, 1:4) 
theDF <- data.frame(YrQtr=sprintf("%s Q%s", theGrid$Var1, theGrid$Var2), 
        Minutes=c(1000, 2200, 1450, 1825, 1970, 1770, 1640, 1920, 1790, 1800, 1750, 1600)) 

kodudur.

g + geom_vline(data=data.frame(Vert=4), aes(xintercept=Vert)) 

Ama bu benim sorun için iyi bir çözüm değildir:

bir çözümdür.

Belki de scale_x_discrete ile uğraşmak yardımcı olabilir?

+0

Bu, 'Verts' olmadan (ki bunun bir veri çerçevesi olduğunu mu varsayıyorum?) Tekrarlanamaz. – joran

+0

@joran Kazaya göre 'data = 'aes' vardı. Şimdi düzeltildi, Verts 'data.frame (Vert = "2010 Q2") 'ile değiştirildi. – Jared

+0

Bu bir hataya benziyor. Bir sorun bildirebilir misiniz: https://github.com/hadley/ggplot2/issues – wch

cevap

0

Bir karakter vektörünü veya bir faktörü kullandığınızda, bir grafikteki x ekseni için, özgün öğelerin her birine verilen varsayılan değerler 1'den başlayan tamsayıdır. Böylece, düzeyleriniz c ("A" ise) "" B "," C ") sonra x ekseni yerleri c (1,2,3) 'dir. Karakter konumu, sadece karakter etiketi diye bir şey yoktur. A'da bir dikey çizgi istiyorsanız, 1'e koyun. Eğer A ve B arasında yarı yolda olmasını istiyorsanız, o zaman 1,5 bırakın. Yine, bunlar varsayılanlardır. Eğer belirli bir arsa başka bir şey yaptıysa, bunu birkaç noktaya çizerek ve ne olduğunu görerek bunu kolayca halledebilirsiniz.

+0

Evet, bu durumda. Ama "ggplot2" nin eski sürümünde "A" ile beslerseniz, bunu 1'e çevirir ve çizgiyi doğru bir şekilde yerleştirir. Bu davranış, kullanıcının orijinal ölçeğini bilmesi gerektiğinden, tam olarak ne anlama geldiği için istenmez. Sergi için kullanılan ggplot2 davranışını yeniden yaratmayı umuyoruz. – Jared

12

Bu deneyebilirsiniz:

g + geom_vline(aes(xintercept = which(levels(YrQtr) %in% '2010 Q1'))) 

Bu seçilen faktör seviyesi için bir kukla veri çerçevesi oluşturmak için gereğini ortadan kaldırır. Hangi() komutu, vline ile ilişkilendirmek için faktör seviyesinin [s] endeksini (veya% operatörünün% sinin sağ tarafı bir vektör ise indisleri) döndürür.

Bununla ilgili olarak, bazı kategoriler verilerinizde görünmüyorsa ve ölçek içinde drop = TRUE kullanıyorsa, çizgiler doğru yerde görünmeyecektir.

+0

İlginç bir yaklaşım. Diğer veri türlerine genellenebilir olduğundan emin olmak için kontrol edeceğim. – Jared