R中堆积条形图中的条件着色

时间:2016-07-05 19:12:13

标签: r bar-chart stacked-chart

我在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)值都应该是&#34; mediumvioletred&#34;,而所有的收据价值(R)应该是&#34; midnightblue&#34;。相反,如果A值为负值,它们会被着色&#34; midnightblue&#34;同样。

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

我在条形图中找到了很多关于着色的解决方案 - 但没有堆积条形图。这篇文章最接近:Conditional Barchart coloring with a vector in R,但仍未解决我的问题。

1 个答案:

答案 0 :(得分:0)

虽然不完全令人满意,但您可以通过一些额外的步骤来完成此操作:

# 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")

第二步将第一行添加到第二行的顶部。

作为替代方案,您可以使用旁边的= TRUE来生成相邻的条形图而不是堆叠的条形图:

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