2014-10-24 10 views
5

Ben st2 ve ST10 adlı tip Büyük SpatialPointsDataFrame iki nesne var. Aynı kaynaktan geliyorlar. Onlar ile sorunsuz hem arsa:ggplot, doğru olmadığı halde geom_point'te "argümanlar farklı sayıda satırlar var" hatası verir - nasıl hata ayıklanır?

plot(st2) 

veya

plot(st10) 

Ama ggmap ve ggplot bunları çizmek istiyorum. Böyle basit bir kodla ST2 için bunu yapabilirsiniz:

map <- get_map(location = 'Poznań', zoom = 12) 
ggmap(map) + geom_point(aes(x [email protected][,1], y = [email protected][,2])) 

Ama ST10 geldiğinde bir hata alıyorum:

Error in data.frame(x = c(16.910848618, 16.910863876, 16.910913467, 16.910936356, : 
arguments imply differing number of rows: 53885, 4 

Ben uzunluğunda değerlerini kontrol() :

> length([email protected][,1]) 
[1] 53885 
> length([email protected][,2]) 
[1] 53885 

Ben Özetle()

ile onları kontrol
> summary([email protected][,1]) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    16.84 16.88 16.91 16.91 16.91 16.99 
> summary([email protected][,2]) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    52.35 52.41 52.46 52.44 52.46 52.46 

Sorun nedir? Bu SP veri çerçevelerinin 20'den fazlası var ve diğerleri de yukarıda belirtilen hatayı veriyorlar ... bu konuyla ilişkili değil

Neyin yanlış olabilir? Ya da belki birisi bana bazı ipuçları verebilir bu nasıl hata ayıklayabilirim?

+0

Örnekleri "? Ggmap" içinde algılarsanız, "colname" ifadesinin _just_ değişkeninin adı olduğu x = colname = dışındaki herhangi bir sözdizimi tarafından eşlenen tek bir estetik örneğinin olmadığını fark edebilirsiniz. Başka bir veri kaynağından puan eklemek istiyorsanız, geom_point (data = ..., aes()) 'gibi bir şey yaparsınız. – joran

+0

Tamam ... Bunu böyle yapmaya çalıştım: geom_point (data = data.frame (lat = st10 @ coords [, 1], lon = lat = st10 @ coords [, 2]), aes()) 've bir geçici çözüm olarak çalıştı.Ama neden hala merak ediyorum ** st2 ** ile gerekli değil? Onlar ggmap için nasıl farklı? Yine de - Teşekkürler! – mrz

+0

Yaptığınız şey sadece şanslı olduğun için çalışıyordu. aes() 'kendi kuralları ile oynamamanız halinde bozulabilecek argümanlarının bazı özel değerlendirmelerini yapar. Aes() 'ın amacı, her zaman açıkça bu katmana ilettiğiniz veri çerçevelerindeki sütun adlarını değerlendirmektir. Aes() 'ın' @ 'veya' $ 'veya' ['_ever_ '' kelimelerini kullanmayın. – joran

cevap

2

Yeni bir veri çerçevesi oluşturarak bunu yaptım.

tlData=data.frame(x=c(0,100000),y=c(0,1000000) 
ggplot(otherdf,aes(x=X,y=Y)+geom_point(alpha=0.1)+geom_line(data=tlData,aes(x=x,y=y),color='red') 

O ggplot görünmektedir kullandığım önceki sürüm AES (X = C (0,100000), y = c kullanarak mükemmel tamam olduğu gibi artık beğeni (0,100000 veri az geom bileşenler

+1

Mutlaka böyle bir geçici çözüm yapmak zorundasınız gibi değil, ama bu şekilde çalışır +1 – chao

İlgili konular