R'de Mozaik Plot Yardımı

Sep 22 2020

Şu anki planım:

İstediğim arsa (değişkenleri boşver)

Özellikle: alttaki x ekseni ile açıklayıcı değişkenler, sağda yanıt değişkenleri, solda göreceli frekans ve y ekseni . R kodumu aşağıya ekleyeceğim.

mosaictable <- matrix (c (3, 9, 22, 21), byrow = T, ncol = 2)
rownames (mosaictable) = c ("White", "Blue ")
colnames (mosaictable) = c ("Captured", "Not Captured")
mosaicplot  ((mosaictable), sub = "Pigeon Color", ylab = "Relative frequency", 
            col = c ("firebrick", "goldenrod1"), font = 2, main = "Mosaic Plot of Pigeon Color and Their Capture Rate"
            
            )
axis (1)
axis (4)

Yanıtlar

AchimZeileis Oct 28 2020 at 11:57

Y ekseninde "bağımlı" bir değişkene sahip olduğunuz ve buna karşılık gelen ek açıklama eklemek istediğiniz bu özel mozaik görünüm, bazen "sırt grafiği" olarak da adlandırılır. R bunu spineplot()işlevde uygular . Ayrıca her ikisi de ve kategorik olduğunda plot(y ~ x)dahili olarak çağrılar .spineplot()yx

Sizin durumunuzda, spineplot()güzel biçimlendirilmiş bir "table"nesne sağlamanız koşuluyla, neredeyse istediğiniz her şeyi otomatik olarak yapar :

tab <- as.table(matrix(c(3, 22, 9, 21), ncol = 2))
dimnames(tab) <- list(
  "Pigeon Color" = c("White", "Blue"),
  "Relative Frequency" = c("Captured", "Not Captured")
)
tab
##             Relative Frequency
## Pigeon Color Captured Not Captured
##        White        3            9
##        Blue        22           21

Ve sonra şunu elde edersiniz:

spineplot(tab)

Şahsen ben bunu böyle bırakırdım. Ancak eksen etiketlerini soldan sağa ve tersi yönde değiştirmek gerçekten önemliyse, bunu önce bastırıp axes = FALSEsonra manuel olarak ekleyerek yapabilirsiniz. Bunun için koordinatların sırasıyla birinci değişkenin marjinal dağılımından ve birinci değişkenin verilen ikinci değişkenin koşullu dağılımından elde edilmesi gerekir.

x <- prop.table(margin.table(tab, 1))
y <- prop.table(tab, 1)[2, ]
spineplot(tab, col = c("firebrick", "goldenrod1"), axes = FALSE)
axis(1, at = c(0, x[1]) + x/2, labels = rownames(tab), tick = FALSE)
axis(2)
axis(4, at = c(0, y[1]) + y/2, labels = colnames(tab), tick = FALSE)