2015-02-27 20 views
6

Ggplot ile, problemi x ekseninde (yıl) aynı verilere sahip olmadığında aynı grafikte 2 tamamlanmamış zaman dizisini çizmeye çalışırken sorun yaşıyorum - NA'lar böylece denedimNA değerlerine sahip ggplot çizgi grafiği

test<-structure(list(YEAR = c(1937, 1938, 1942, 1943, 1947, 1948, 1952, 
1953, 1957, 1958, 1962, 1963, 1967, 1968, 1972, 1973, 1977, 1978, 
1982, 1983, 1986.5, 1987, 1993.5), A1 = c(NA, 24, NA, 32, 32, 
NA, 34, NA, NA, 18, 12, NA, 10, NA, 11, NA, 15, NA, 24, NA, NA, 
25, 26), A2 = c(40, NA, 38, NA, 25, NA, 26, NA, 20, NA, 17, 
17, 17, NA, 16, 18, 21, 18, 17, 25, NA, NA, 26)), .Names = c("YEAR", "A1", 
"A2"), row.names = c(NA, -23L), class = "data.frame") 

aşağıdaki kod ayrık karışıklık çıkarır: belirli yıldır mevcut

ggplot(test, aes(x=YEAR)) + 
    geom_line(aes(y = A1), size=0.43, colour="red") + 
    geom_line(aes(y = A2), size=0.43, colour="green") + 
    xlab("Year") + ylab("Percent") + 
    scale_x_continuous(limits=c(1935, 1995), breaks = seq(1935, 1995, 5), 
        expand = c(0, 0)) + 
    scale_y_continuous(limits=c(0,50), breaks=seq(0, 50, 10), expand = c(0, 0)) 

enter image description here

Bu sorunu nasıl çözebilir?

cevap

7

Tercih ettiğim çözüm, bunu uzun formatta yeniden şekillendirmek olurdu. Sonra sadece 1 geom_line aramasına ihtiyacınız var. Özellikle çok sayıda diziniz varsa, bu daha düzenli. LyzandeR'in 2. şemasıyla aynı sonuç.

enter image description here

library(ggplot2) 
library(reshape2) 

test2 <- melt(test, id.var='YEAR') 
test2 <- na.omit(test2) 

ggplot(test2, aes(x=YEAR, y=value, color=variable)) + 
    geom_line() + 
    scale_color_manual(values=c('red', 'green')) + 

    xlab("Year") + ylab("Percent") + 
    scale_x_continuous(limits=c(1935, 1995), breaks = seq(1935, 1995, 5), 
        expand = c(0, 0)) + 
    scale_y_continuous(limits=c(0,50), breaks=seq(0, 50, 10), expand = c(0, 0)) 

Sen hattına ek olarak geom_point() çağrı eklemeyi düşünebilirsiniz, bu nedenle gerçek değerlerdir ve hangi eksik olan noktaları açık. Uzun formatın bir başka avantajı, ek jeomların her biri her bir seri için 1'in aksine sadece 1 çağrı almasıdır.

enter image description here

+0

Teşekkürler, ben eriyik denedim ama 'na.omit' özledim. Her satır için çizgi türünü nasıl değiştiririm? – user2568648

+1

Aynı şekilde renkler yukarıda değiştirildi. aes çağrısında linetype = variable', sonra (linux = variable') scale_linetype_manual', hangi tür linetype belirtmek istiyorsanız – arvi1000

4

Sen na.omit bunları kaldırabilirsiniz:

library(ggplot2) 
#use na.omit below 
ggplot(na.omit(test), aes(x=YEAR)) + 
    geom_line(aes(y = A1), size=0.43, colour="red") + 
    geom_line(aes(y = A2), size=0.43, colour="green") + 
    xlab("Year") + ylab("Percent") + 
    scale_x_continuous(limits=c(1935, 1995), breaks = seq(1935, 1995, 5), 
        expand = c(0, 0)) + 
    scale_y_continuous(limits=c(0,50), breaks=seq(0, 50, 10), expand = c(0, 0)) 

enter image description here

DÜZENLEME 2 ayrı data.frames kullanma

na.omit ile:

#test1 and test2 need to have the same column names 
test1 <- test[1:2] 
test2 <- tes[c(1,3)] 
colnames(test2) <- c('YEAR','A1') 

library(ggplot2) 
ggplot(NULL, aes(y = A1, x = YEAR)) + 
    geom_line(data = na.omit(test1), size=0.43, colour="red") + 
    geom_line(data = na.omit(test2), size=0.43, colour="green") + 
    xlab("Year") + ylab("Percent") + 
    scale_x_continuous(limits=c(1935, 1995), breaks = seq(1935, 1995, 5), 
        expand = c(0, 0)) + 
    scale_y_continuous(limits=c(0,50), breaks=seq(0, 50, 10), expand = c(0, 0)) 

enter image description here

+0

Tamam, ama neden 1947 öncesi veriler değil çizilir? – user2568648

+1

'na.omit, satırları NA ile kaldırır. Aksi takdirde, bunları aynı veri çerçevesinde elde edemezsiniz. – LyzandeR

+0

Tamam, ama ggplot ile birden fazla veri çerçevelerini çizmek mümkün mü? – user2568648

İlgili konular