1

我当前的情节: 在此处输入图像描述 我想要的情节(不要介意变量s)

在此处输入图像描述

具体来说:底部的解释变量带有 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)
4

1 回答 1

1

这种特殊风格的马赛克显示在 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)

自定义脊柱图

于 2020-10-28T11:57:13.617 回答