# データフレームから棒グラフを書く関数(その1) barplot2 <- function(df){ dm <- as.matrix(df) regend <- rownames(df) names <- colnames(df) if(ncol(dm)==2){ d.seg.ys <- cumsum(dm[,1]) d.seg.ye <- cumsum(dm[,2]) }else{ d.seg.ys <- apply(dm[,1:(ncol(dm) - 1)], 2, cumsum) d.seg.ye <- apply(dm[,2:ncol(dm)], 2, cumsum) } d.seg.xs <- rep((0.2 + 1) * 1:(ncol(dm) - 1), each=nrow(dm)) d.seg.xe <- rep((0.2 + 1) * 2:ncol(dm) - 1, each=nrow(dm)) barplot(dm, names.arg=names, legend.text=regend) segments(d.seg.xs, d.seg.ys, d.seg.xe, d.seg.ye) } # 使用方法 data(Titanic) Titanic.df <- as.data.frame(Titanic) attach(Titanic.df) df <- as.data.frame(tapply(Freq, list(Class, Survived), sum)) #ここではあえてデータフレームに変換 barplot2(df)