R의 모자이크 플롯 도움말

Sep 22 2020

내 현재 플롯 :

내가 원하는 플롯 (변수는 신경 쓰지 마세요)

구체적 으로는 하단에 x 축이있는 설명 변수, 오른쪽에 응답 변수, 왼쪽에 상대 빈도 및 y 축이 있습니다 . 아래에 R 코드를 첨부하겠습니다.

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)

답변

AchimZeileis Oct 28 2020 at 11:57

y 축에 "종속"변수가 있고 해당 주석을 추가하려는이 특별한 모자이크 디스플레이를 "스파인 플롯"이라고도합니다. R은 이것을 spineplot()함수 에서 구현 합니다. 또한 및 둘 다 범주 plot(y ~ x)형일 spineplot()때 내부적으로 호출합니다 .yx

귀하의 경우 spineplot()에는 멋진 형식의 "table"개체를 제공하는 경우 원하는 거의 모든 작업을 자동으로 수행 합니다.

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

그리고 다음을 얻습니다.

spineplot(tab)

개인적으로 나는 그것을 남겨두고 싶습니다. 그러나 축 레이블을 왼쪽에서 오른쪽으로 또는 그 반대로 전환하는 것이 정말 중요한 경우 먼저 억제 axes = FALSE한 다음 나중에 수동으로 추가하면됩니다. 그 좌표는 각각 첫 번째 변수의 주변 분포와 두 번째 변수의 조건부 분포에서 구해야합니다.

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)