【问题标题】:How to produce nice qualitative bar composition graphs如何生成漂亮的定性条形图
【发布时间】:2011-12-21 21:40:13
【问题描述】:

这是我的数据:

ind <- c( rep(1, 20), rep (2, 20), rep (3, 20), rep(4, 20))
bar <- c(rep(rep(1:4, each = 5),  4))

mark <- c(rep ("A", 5), rep("B", 5), rep("C",5), rep("D",5),
          rep("B", 20), rep("C", 20), "A", "B", "C", "A", "C","A",
          "D", "D", "D", "D","A", "C", "C", "A", "B", "B","B",
          "C","C","C")

dataf <- data.frame(ind, bar, mark)

每个人 (ind) 有 4 个按顺序排列的条形图,并且是彩色的。个人之间应该有更大的空间。我可能有任意数量的人。以下是用 excel 绘制的预期图形,我想在 R 中创建更漂亮的图形。

请注意,每个 ind 级别 (1:4) 为四个栏 (1:4)。每个 ind 的所有四个条都集中在一个位置。

【问题讨论】:

    标签: r graphics graph plot


    【解决方案1】:

    您可以尝试使用rect 函数单独绘制每个矩形。尝试运行一个循环来遍历堆栈中的每个框:

    par(mfrow=c(2, 2))
    
    for(i in unique(ind)) {
      plot(0, col=0, bty="n", xaxt="n", yaxt="n", xlab = i, ylab = "", xlim=c(0, 5), ylim=c(-6, -1))
      for(j in 1:4) {
        for(k in 1:5) {
          rect(j-0.4, -k-1, j+0.4, -k, col = which(unique(mark)==matrix(mark[ind==i], 5, 4)[k,j])+1, border = rgb(0,0,0,0))
          text(j, -k-0.5, labels = matrix(mark[ind==i], 5, 4)[k,j])
        }
        rect(j-0.4, -6, j+0.4, -1)
      }
    }
    

    【讨论】:

    • 感谢您的正确回答。我们可以在每个图形周围放置边距矩形吗
    【解决方案2】:

    这是使用ggplot的一个选项:

    dataf$y <- rep(5:1,times = 16)
    
    ggplot(dataf,aes(x=bar,y=y)) + 
        facet_wrap(~ind) +
        geom_tile(aes(fill = mark),colour = "black") + 
        geom_text(aes(label = mark)) + 
        labs(x = NULL,y = NULL) +
        opts(axis.text.x = theme_blank(),axis.text.y = theme_blank())
    

    由于我使用的是geom_tile,因此您失去了“条”之间的分隔。我认为,唯一的其他选择是使用geom_rect,并为其指定坐标会更复杂。

    【讨论】:

    • 谢谢你的回答......但我需要条之间的空间(用于象征目的)并且每个条内没有线......
    • @John 好吧,这就是你为挑剔付出的代价! ;) 如果您已经在 Excel 中绘制了绘图,请使用它。
    • @hadley 我在docs 中没有看到宽度参数,并且在我尝试时似乎没有效果。你能启发我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多