【问题标题】:conditional coloring in stacked bar graph in RR中堆积条形图中的条件着色
【发布时间】:2016-07-05 19:12:13
【问题描述】:

我在 R 中有以下代码:

dat <- as.matrix(read.table(text ="2011 2012 2013 2014
            A -330.2165 500.53 730.75 -130.0941
            R 2036.32 1155.91 345.81 218.0350", header=TRUE))

pts <- pretty(c(min(dat),max(dat)))

barplot(dat,
        ylim=c(min(pts),max(pts)),
        col=c("mediumvioletred","midnightblue"),    
        legend.text=c("Appropriation","Receipts"),
        args.legend = list(x="topleft", bty="n"))

问题是所有拨款 (A) 值都应该是“中紫罗兰色”,而所有收据值 (R) 应该是“午夜蓝”。相反,如果 A 值为负数,它们也会被着色为“午夜蓝”。

有谁知道如何解决这个问题?或者至少,为每个绘制的点指定一种颜色?

我找到了很多条形图着色的解决方案——但不是堆叠条形图。这篇文章最接近:Conditional Barchart coloring with a vector in R,但仍然没有解决我的问题。

【问题讨论】:

    标签: r bar-chart stacked-chart


    【解决方案1】:

    虽然不完全令人满意,但您可以通过一些额外的步骤来做到这一点:

    # get the size of first bar (blue) with positive second bar added on
    # first plot (blue)
    barplot(firstBar,
            ylim=c(min(pts),max(pts)),
            col="midnightblue")
    # add second plot (red)
    barplot(dat[1,], col="mediumvioletred", add=TRUE)
    # add legend
    legend(x="topright", legend=c("Receipts", "Appropriation"),
           fill=c("midnightblue", "mediumvioletred"), bty="n")
    

    第二步将第一行添加到第二行之上。

    作为替代方案,您可以在相邻条形图而不是堆叠条形图中使用 beside=TRUE:

    barplot(dat,
            col=c("mediumvioletred", "midnightblue"),    
            legend.text=c("Appropriation","Receipts"),
            args.legend = list(x="topleft", bty="n"), beside=TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多