1

2 つのグループを持つ格子を使用して棒グラフを作成しようとしています。最初のグループ化は積み上げられますが、2 番目のグループ化は積み上げられません。例えば:

a <- factor(rep(c(1,2), times = 6))
b <- factor(rep(c(1,2,3), times = 4))
c <- factor(rep(c(1,2,3,4), times = 3))
d <- factor(rep(c("true", "false"), each = 6))
e <- factor(rep(c("yes", "no", "may be"), each = 4))
value <- c(5,8,2,4,1,8,9,3,5,6,3,12)

現時点では、次のことを行っています。

a <- factor(rep(c(1,2), times = 6))
b <- factor(rep(c(1,2,3), times = 4))
c <- factor(rep(c(1,2,3,4), times = 3))
d <- factor(rep(c("true", "false"), each = 6))
e <- factor(rep(c("yes", "no", "may be"), each = 4))
value <- c(5,8,2,4,1,8,9,3,5,6,3,12)

barchart(value ~ a | b + c, 
       groups = d, stack = FALSE, 
       auto.key=TRUE,
       scales = list(x = "free"))

これにより、長さ (b) * 長さ (c) の棒グラフのセットが得られ、それぞれの長さ (a) の棒のセットが含まれます。バーの各セットには、「真」のバーと「偽」のバーがあります。また、追加したいのは、e の積み上げ値です。これにより、各「真」のバーが 3 つのセクションに分割されます。一番下のセクションは「はい」、次に「いいえ」、「そうかもしれない」、そして「false」バーと同じです。

グラフが非常に複雑になることは承知していますが、これは私が持っているデータを表す最良の方法です。b + c + e のように式に e を追加することはオプションではありません。プロットのセットが既にあり、それらが互いに関連しているため、同じ形式を維持する必要があるためです。一方、各セットに 6 つの小節があると、可読性が大幅に低下します。

ありがとう!

4

1 に答える 1

1

ggplot2lattice使用することが難しい要件でない場合は、比較的簡単に作業を行うことができます。a、b、c、d、および e のすべての組み合わせが存在するように、自由にデータ セットを拡張しました。

# Load required packages
require(ggplot2)
require(plyr)

# Make factors with the same levels as in the original post
#   but 100x longer, and in random order so all combinations are present
a <- sample(factor(rep(c(1,2), times = 600)))
b <- sample(factor(rep(c(1,2,3), times = 400)))
c <- sample(factor(rep(c(1,2,3,4), times = 300)))
d <- sample(factor(rep(c("true", "false"), each = 600)))
e <- sample(factor(rep(c("yes", "no", "may be"), each = 400)))
value <- runif(1200)

# Put them in a data frame
df <- data.frame(a=a, b=b, c=c, d=d, e=e, value=value)

# Calculate the sum of the value columns for each unique combination of a, b, c, d, and e
#   I think this is what you'd like - am not totally sure
ds <- ddply(df, c("a", "b", "c", "d", "e"), summarise, sum.value=sum(value, na.omit=TRUE))

# Make the plot
ggplot(ds, aes(x=d, y=sum.value, fill=e)) + geom_bar(stat="identity") +
  facet_grid(a~b+c) +
  theme(axis.text.x=element_text(angle=-90))

ここに画像の説明を入力

于 2013-08-12T19:02:57.650 に答える