0

以下のようなデータ プールがあります。マーク 1 とマーク 2 はパーセンテージです

Subject  Marks1  Marks2

ABC      45       55
CDE      34       66
DHD      54       46
XYZ      35       65
YXS      56       44
YDT      88       12

グラフをプロットしましたが、データの順序に問題があります。つまり、marks1 が昇順になるようにグラフを配置する必要があります。つまり、34 が最初の棒で、残りが残りの棒になります。

私が書いたコードは

n.data = ddply(c.data,.(subject), transform, pos = cumsum(value) - 0.5*value)

plot = ggplot(n.data, aes(x = subject, y = value)) +
    geom_text(aes(label = value, y = pos), size = 3, face="bold", colour="white") +

    labs(fill="")
4

1 に答える 1

3

コードを実行するにはいくつかの問題があります。まず、取得するために示したデータからデータを溶かす部分を見逃したと思いますc.data:

c.data <- melt(dat, id.var="Subject")

次に、次のようにするsubject必要がありますSubject

x第 3 に、 と の両方のy引数を美学に渡すため、 を行う必要がありますstat = "identity"。そうしないと、デフォルトの引数が であるため、警告が表示されますstat = "bin"

最後に、必要な方法でプロットを並べ替えるには、Subjectそれに応じて因子水準を設定する必要があります。したがって、完全なコードは次のとおりです。

# set factor levels
dat$Subject <- factor(dat$Subject, levels = dat$Subject[order(dat$Marks1)])

require(reshape2)
c.data <- melt(dat, id.var="Subject")

require(plyr)
n.data = ddply(c.data,.(Subject), transform, pos = cumsum(value) - 0.5*value)

require(ggplot2)
plot = ggplot(n.data, aes(x = Subject, y = value)) + 
    geom_bar(stat = "identity", colour = "#000000", aes(fill = variable)) + 
    geom_text(aes(label = value, y = pos), size = 3, face="bold", colour="white") +
    scale_fill_manual(values=c("#FFFFFF", "#000000")) + 
    scale_y_continuous(limits=c(0, 100), breaks=seq(0,100, by = 10)) +
    theme(axis.line = element_line(),
          axis.text.x=element_text (angle=60,hjust=1,colour="black"),
          axis.text.y=element_text(colour="black"),
          axis.title.x = element_blank(),
          axis.title.y = element_blank(),
          panel.background = element_blank(),
          axis.ticks=element_blank()) +
    labs(fill="") + scale_colour_discrete(breaks=NULL)

そして、ここにプロットがあります:

ここに画像の説明を入力

于 2013-07-15T03:02:22.063 に答える