R中的barplot直观地显示收入和支出

时间:2016-10-05 22:43:09

标签: r bar-chart

year month income expense diff
2016 07 50 15 35
2016 08 30 70 -40

我有上面描述的数据,我想在组中每个月画一个条形图,收入和费用,从左到右,并排。 例如,在2016年7月,它有两个竖线,在(2016-07,-15)和(2016-07,35)之间为收入,在(2016-08,-40)和(2016-08,30之间) )费用。 我设法用下面的R代码制作一个图表,这与我真正想要的不同。

year<- c(2016,2016)
month<-c(07,08)
income<-c(50,30)
expense<-c(15,70)
diff<-c(35,-40)
(dtt<-data.frame(YEAR=year, MONTH=month, INCOME=income, EXPENSE=expense, DIFF=diff))
dttm<-as.matrix(dtt)
barplot(t(dttm[,c(3,4)]), beside=TRUE)

enter image description here

我想像这样修改这个情节。任何帮助都会很感激。

enter image description here

感谢您的关注。 首先,我想补充一下我以前的信息,即2016年8月,它有两个垂直条,在(2016-08,0)和(2016-08,30)之间为收入,以及(2016-08, -40)和(2016-08,30)费用。 我在下面画了一张jpeg图片,上面是我想用R命令绘制的图表。 我希望它能让我的演讲更容易被理解。

enter image description here

1 个答案:

答案 0 :(得分:0)

x

month income_expense
1 2016-07             50
2 2016-07            -15
3 2016-08             30
4 2016-08            -75

x$id <- seq_along(x$income_expense)
x$type <- ifelse(x$income_expense > 0, "in",
    "out")
x[x$month %in% c("Starting Cash", "End Cash"),
    "type"] <- "net"
month_type <- paste(x$month, x$type, sep="-")
x.paste<-cbind(x, month_type)

for (i in 1:(length(x.paste)/2)) {
x.paste$start5[2*i-1] <- ifelse(abs(x.paste$income_expense[2*i-1]) > abs(x.paste$income_expense[2*i]) , x.paste$income_expense[2*i],
    0)
x.paste$end5[2*i-1] <- ifelse(abs(x.paste$income_expense[2*i-1]) > abs(x.paste$income_expense[2*i]) , x.paste$income_expense[2*i-1]+x.paste$income_expense[2*i],
    x.paste$income_expense[2*i-1])
x.paste$start5[2*i] <- ifelse(abs(x.paste$income_expense[2*i-1]) > abs(x.paste$income_expense[2*i]) ,x.paste$income_expense[2*i] ,
    x.paste$income_expense[2*i-1]+x.paste$income_expense[2*i])
x.paste$end5[2*i] <- ifelse(abs(x.paste$income_expense[2*i-1]) > abs(x.paste$income_expense[2*i]) , 0,
    x.paste$income_expense[2*i-1])
}

png("Waterfall_bs01.png", width = 500, height = 300, pointsize = 12, bg = "white")
library(ggplot2)
ggplot(x.paste, aes(month_type, fill = type)) + geom_rect(aes(x = month_type,
xmin = id - 0.45, xmax = id + 0.45, ymin = end5,
ymax = start5))

graphics.off()

Jimbou

我想逐月提取费用和收入。 为了做到这一点,我垂直移动每个向量,然后将其传递给geom_rect()。 不管怎样,谢谢。