绘制两个分类变量

时间:2017-06-25 19:03:51

标签: r plot

我使用下面的命令在R

中绘制两个分类变量

性别有2个级别,收入有9个级别。

spineplot(main$Gender,main$Income, xlab="Gender", ylab="Income levels: 1 is lowest",xaxlabels=c("Male","Female"))

它生成如下enter image description here

之类的图表
  1. 如何以彩色绘制此图表?
  2. 如何在每个方框中显示每个收入水平的百分比?例如,女性收入水平1有21%的数据。如何在深色区域内显示21%
  3. ################ update 1

    添加可重复的示例

    fail <- factor(c(2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1,
                     1, 1, 1, 2, 1, 1, 1, 1, 1,2,2,2,2),
                   levels = c(1, 2), labels = c("male", "female"))
    gender <- factor(rep(c(1:9),3))
    spineplot(fail,gender)
    

2 个答案:

答案 0 :(得分:3)

我认为使用barplot执行此操作可能会更容易,因为spineplot不会返回任何有用的内容。

默认值如下,但您可以将条的宽度调整为其他变量(您可以看到返回的x轴坐标):

par(mfrow = 1:2)
(barplot(table(gender, fail)))
# [1] 0.7 1.9
(barplot(table(gender, fail), width = table(fail)))
# [1] 10.7 26.9

enter image description here

我们得到一些最终的接触

tbl <- table(gender, fail)
prp <- prop.table(tbl, 2L)
yat <- prp / 2 + apply(rbind(0, prp[-nrow(prp), ]), 2L, cumsum)

bp <- barplot(prp, width = table(fail), axes = FALSE, col = rainbow(nrow(prp)))

axis(2L, at = yat[, 1L], labels = levels(gender), lwd = 0)
axis(4L)

text(rep(bp, each = nrow(prp)), yat, sprintf('%0.f%%', prp * 100), col = 0)

enter image description here

比较
spineplot(fail, gender, col = rainbow(nlevels(gender)))

enter image description here

答案 1 :(得分:2)

@rawr的有趣解决方案的替代方案是:

{ name: 'ACCOUNT_UNCONFIRMED_EMAIL ',
  message: 'Sender\'s email is not confirmed',
  information_link: 'https://developer.paypal.com/docs/api/payments.payouts-batch/#errors' }

enter image description here

希望它可以帮到你。