積み上げ棒グラフを作成しようとしていますが、凡例を配置して棒のいずれとも重ならないようにすることはできません。マージンを調整し、xlim
を設定し、別のlegend
ステートメントを使用してここで検索しようとしましたが、すべて成功しませんでした。実際、サンプルデータセットのコードはStackOverflowから来ました。私はベースRを使用していますが、ベースRソリューションを好みます。アドバイスありがとうございます。
setwd('c:/users/mmiller21/simple R programs/')
jpeg(filename = "barplot.jpeg")
set.seed(1234)
x <- replicate(8, round(10 * rexp(2000, 10)))
y <- apply(x, 2, function(column) table(factor(column, levels = 0:9)))
colnames(y) <- paste('A', seq(1,ncol(y),1), sep='')
rownames(y) <- paste('R', seq(1,nrow(y),1), sep='')
y
# A1 A2 A3 A4 A5 A6 A7 A8
# R1 769 800 790 806 792 787 834 801
# R2 779 733 793 757 786 744 731 776
# R3 284 297 278 272 263 301 280 275
# R4 112 106 91 124 106 103 104 96
# R5 33 38 37 26 36 37 30 36
# R6 11 18 7 11 10 20 11 9
# R7 8 8 3 2 3 3 9 5
# R8 4 0 1 2 4 4 0 2
# R9 0 0 0 0 0 1 1 0
# R10 0 0 0 0 0 0 0 0
par(mfrow=c(1, 1), mar=c(5, 5, 4, 2) + 0.1)
barplot(y, col = 1:nrow(y), ylab="My Variables", legend.text = TRUE,
args.legend = list(x = "topright", bty = "n"))
dev.off()
マージンあり
par(mfrow=c(1, 1), mar=c(5, 5, 4, 8))
barplot(y, col = 1:nrow(y), ylab="My Variables", legend.text = TRUE,
args.legend = list(x = "topright", bty = "n", inset=c(-0.15, 0)))
楽しみのために、ここにggplot2
、凡例の重複なし。
set.seed(1234)
x <- replicate(8, round(10 * rexp(2000, 10)))
y <- apply(x, 2, function(column) table(factor(column, levels = 0:9)))
y <- as.data.frame(y)
colnames(y) <- paste('A', seq(1,ncol(y),1), sep='')
rownames(y) <- paste('R', seq(1,nrow(y),1), sep='')
library(ggplot2)
library(reshape)
y$ID <- rownames(y)
y.melt <- melt(y, id.var = 'ID')
y.melt <- within(y.melt, ID <- factor(ID,
c('R10','R9','R8','R7','R6','R5','R4','R3','R2','R1'),
ordered = TRUE))
ggplot(y.melt, aes(x = variable, y = value, fill = ID)) +
geom_bar(stat = 'identity') +
xlab("") +
ylab("My variable") +
theme(legend.title=element_blank())