2013-02-07 17 views
7

Bir Avustralya İstatistik Bürosu'ndan elde edilen Avustralya'da uzak bölgeleri gösteren şekil dosyası var bir yuva değere dayalı şekil dosyası poligon Boyama: Aynı URL'deR - arsa ile sıkışmış() -

http://www.abs.gov.au/AUSSTATS/[email protected]/DetailsPage/1270.0.55.005July%202011?OpenDocument

PDF "ASGS Uzaklık Yapısı Sürümü 2011 PDF Haritalar" - Bu PDF belgesindeki ilk haritayı yeniden oluşturmaya çalışıyorum.

Ben shape okumak ve data yuvaya renk bilgisini eklemiş: arsa haritasıdır yapmamı için

ra <- readShapeSpatial("RA_2011_AUST", delete_null_obj = TRUE) 
[email protected]$COLOUR <- "#FFFFFF" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 0] <- "#006837" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 1] <- "#31A354" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 2] <- "#78C679" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 3] <- "#C2E699" 
[email protected]$COLOUR[(as.numeric(as.character([email protected]$RA_CODE11)) %% 10) == 4] <- "#FFFFCC" 

tek şey bıraktı! Sıkıştığım yer burasıdır ...

[email protected], her biri ID veri karnesine sahip olan ve her biri [email protected] veri çerçevesine bir dizin olan 35 çokgenlerin listesidir. Tek yapmam gereken, [email protected]$COLOUR[ID]'daki rengi bulmak için plot()'a anlatmak. Pek iyi değil. 35 çokgenin ("Çokgenler") her birinin kendi çokgen listesi vardır ("Çokgen" sınıfı); Toplamda 6902 çokgen var!

plot() anlayışım, çokgenlerin çizileceği gibi, aynı renkteki bir vektörü aktarmak zorunda olduğumdur. Bu nedenle, ilgili poligonun renk değerini tutan her elemanın 6902 uzunluğundaki bir vektörünü oluşturmam gerektiğine inanıyorum. Şimdiye kadar nasıl yapıyorum?

Çokgenler sırayla çizildiyse bu yeterince kolay olurdu, ama değiller. 35 Çokgenlerin her biri, bir tamsayı vektörü olan bir plotOrder yuvasına sahiptir, bu nedenle, bu vektörlerin her birindeki değerler tarafından renk vektörünün sıralanması gerekecektir.

Bu noktada her şey biraz karmaşık görünüyor. Buradan tamamen uzak mıyım?

Tavsiyeniz için teşekkürler!

+2

rgdal paketinden readOGR kullanarak şekil dosyalarını okumalısınız ve şekil dosyalarına sahip bir .prj dosyası varsa, projeksiyon verilerine yüklenecektir. – Spacedman

cevap

11

Zaten tüm işi yaptın!

plot(ra, col=ra$COLOUR) 

Ve işte bu kadar:

plot(ra, [email protected]$COLOUR) 

Hatta, @Spacedman olarak öne!

enter image description here

Ve poligon sınırları kurtulmak istiyorsanız:

plot(ra, col=ra$COLOUR, border=NA) 

enter image description here

Düzenleme:

göre: Bu davranışı açıklamak için bir girişim ?SpatialPointsDataFrame:

SpatialPolygonsData Varsayılan kimlik eşlemeli veri çerçevesi, veri çerçeve satır adlarını Çokgen Kimlik yuvalarına karşı denetler. Daha sonra birbirleriyle hemfikir olmalılar ve benzersiz olmalılar (hiçbir Poligon nesnesi kimlikleri paylaşamaz); Çokgen kimlikleriyle eşleşmesi gerekiyorsa veri çerçeve satırları yeniden sıralanacaktır.çokgenler dolayısıyla onların numarası olarak sipariş ve bunun anlamı

yuva @data içinde dataframe sıraları olarak sıralanmıştır.

... 
    polys <- slot(x, "polygons") 
    pO <- slot(x, "plotOrder") 
    if (!is.null(density)) { 
     if (missing(col)) 
      col <- par("fg") 
     if (length(col) != n) 
      col <- rep(col, n, n) 
     if (length(density) != n) 
      density <- rep(density, n, n) 
     if (length(angle) != n) 
      angle <- rep(angle, n, n) 
     for (j in pO) .polygonRingHoles(polys[[j]], border = border[j], 
      xpd = xpd, density = density[j], angle = angle[j], 
      col = col[j], pbg = pbg, lty = lty, ...) 
    } 
... 

col girilen vektör polygons yuvası ile aynı düzeni sahiptir ve bu nedenle numarası:

Şimdi bir noktada bu hatlar bulunmaktadır (getAnywhere(plot.SpatialPolygons) kullanılarak) işlevi plot.SpatialPolygons bakarsak. Hepsi aynı şekilde dizinlemek için plotOrder kullanılır.

+2

Sadece 'ra $ COLOUR' çalışması gerekir - uzamsal veri çerçeveleri çoğunlukla veri çerçeveleri gibi çalışırlar, ancak onlar ne zaman ... – Spacedman

+0

Tamam, oldukça güzel! Ama neden işe yarıyor? Ra @ plotOrder tarafından belirtilen sırayla çizilen çokgenler değil mi ??? Bu çözüm, yalnızca sayısal sırayla çizilirse, ra @ plotOrder göz ardı edilirse çalışır. –

+0

Ve 6902 "yaprak" çokgenler ne olacak? Sanırım bu, bu sınıf için plot() yönteminin nasıl uygulandığıdır, ancak bu şekilde olması gerektiği açık değildir. –