2011-12-12 24 views
5

BenScatterplot - baz R arsa

x<-rnorm(100) 
y<-rnorm(100) 
z<-rnorm(100) 

Ben plot(x,y) çizmek istiyorum ama noktalarının renk olmalıdır z dayalı kodlu basit dağılım grafiği var.

Ayrıca, kaç tane (ve dolayısıyla renklerin) z olması gerektiğini tanımlama yeteneğine sahip olmak isterim. Ve bu gruplamanın aykırı değerlere karşı dayanıklı olması (belki z yoğunluğunu n eşit yoğunluklu gruplara ayırın).

Şimdiye kadar bunu elle yapıyorum, bunu otomatik olarak yapmanın bir yolu var mı?

Not: Bunu, ggplot numaralı R tabanıyla yapmak istiyorum.

cevap

11

Renklerin bir vektörünü col parametresine iletebilirsiniz, bu nedenle uygulamanız için anlamlı olan bir şekilde z gruplarınızı tanımlamanız yeterlidir. Bazında cut() işlevi veya Hmisc'de cut2() biraz daha esneklik sunuyor. Makul renk paletlerini seçmek için RColorBrewer paketi paha biçilmezdir. İşte x,y,z tanımlayan sonra kısa bir örnek: Açıkçası elle legend ekleyebilir

z.cols <- cut(z, 3, labels = c("pink", "green", "yellow")) 
plot(x,y, col = as.character(z.cols), pch = 16) 

enter image description here

. Ne yazık ki, her türlü çizimin col argümanı için vektörleri kabul etmediğini düşünüyorum, ancak type = "p" açıkça işe yarıyor. Örneğin, plot(x,y, type = "l", col = as.character(z.cols)) benim için tek bir renk olarak çıkıyor. Bu grafikler için, lines() veya segments() ile farklı renkler ekleyebilir veya kullanmanız gereken düşük seviyeli çizim komutu ne olursa olsun. Bunu, here temel grafiklerindeki type = "l" çizimiyle @Andrie yanıtına bakın.

+0

Kesilmiş içerik aralıklarında kes() bölünür mü? – ECII

+0

@ECII - varsayılan olarak değil. Hmisc ::: cut2() ', her gruptaki minimum gözlem sayısını belirleyen 'm' argümanını sağlar. Z.cols2 <- cut2 (z, m = length (z)/3) 'gibi bir şey hile yapmalıdır. – Chase

+0

Kesik2'deki g argümanı daha iyi olmamalı mıdır? cut2 (z, g = 3)? – ECII