2017-01-07 12 views
5

Her veri noktasındaki etiketlerle R'de bir çizgi grafik (çizim) oluşturdum. Çok sayıda veri noktasından dolayı, arsa, etiketlerle çok tam olarak olur. Etiketleri sadece son N (say 4) veri noktası için uygulamak istiyorum. alt kümesini ve kuyruğunu geom_label_repel işlevinde denedim, ancak hata iletisini bulamadık veya hata mesajı almadık. Veri setim 3 gruba (KPI) yayılmış 99 değerden oluşmaktadır.R ggplot: Sadece son N veri noktasına işaret yapıştırın:

library(ggplot) 
library(ggrepel) 

data.trend <- read.csv(file=....) 

plot.line <- ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 

    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 


    # Labels defined here 
    geom_label_repel(
    aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
    box.padding = unit(0.35, "lines"), 
    point.padding = unit(0.4, "lines"), 
    segment.color = 'grey50', 
    show.legend = FALSE 
) 

); 

Ben Belki temel şey kaçırmak R. oldukça yeni tüm adalet duyuyorum:

Ben Ar aşağıdaki kodu var.

Şimdiden teşekkürler.

+1

Lütfen tekrarlanabilir bir örnek verin veya en azından ortaya çıkan şekli gösterin. –

cevap

6

en basit yaklaşım sadece etiketli istediğiniz noktaları kapsayacak şekilde geom_label_repel yılında data = parametreyi ayarlamaktır. İşte

bir tekrarlanabilir örnek:

set.seed(1235) 
data.trend <- data.frame(Version = rnorm(25), Value = rnorm(25), 
         group = sample(1:2,25,T), 
         KPI = sample(1:2,25,T)) 

ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 
    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 
    geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
    data = tail(data.trend, 4),     
    box.padding = unit(0.35, "lines"), 
    point.padding = unit(0.4, "lines"), 
    segment.color = 'grey50', 
    show.legend = FALSE) 

enter image description here

Maalesef bu etiketi olmayan diğer noktalara göre optimal etiket yerleştirme yapma püskürtmek algoritması ile hafifçe kurcalamayacağından (Gördüğünüz Yukarıdaki şekilde, bazı noktalar etiketlerle kaplanmıştır).

ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) + 
    geom_line(aes(group = KPI), size = 1) + 
    geom_point(size = 2.5) + 
    geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)), 
        box.padding = unit(0.35, "lines"), 
        point.padding = unit(0.4, "lines"), 
        show.legend = FALSE, 
        color = c(rep(NA,21), rep('grey50',4)), 
        fill = c(rep(NA,21), rep('lightblue',4))) 

enter image description here

:

Yani, daha iyi bir yaklaşım (Gizlemek istediğiniz etiketler için NA hem renk ayarlayarak ve dolgu) sadece istenmeyen etiketleri görünmez hale getirmek için color ve fill kullanmaktır

+0

Teşekkürler, beni doğru yöne soktun. Ancak, sadece 1 satırın son veri noktalarının gösterildiğini görüyorum. Bunun üstesinden gelmek için, veri alanında sadece bunları göstermek üzere çizim yapmak ve kullanmak istediğiniz Sürümleri içeren bir liste ekledim. Bu, repel işlevini karıştırıyor, ancak bu benim durumumda sorun değil. Çok teşekkürler! 'etiket <- kuyruğu (data.trend $ şekli, 3) ..... geom_label_repel ( verileri = alt kümesi (data.trend,% etiketleri data.trend $ Sürüm%), AES (Sürüm, Değer, dolgu = faktör (KPI), label = sprintf ('% 0.1f %%', Değer)), ... ) ' – user32556