在R中对多列数据进行排序

光明会

我有一个像下面的数据池Marks 1和Marks 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="")
阿伦

使您的代码运行有一些问题。首先,我认为,您错过了将数据从显示的数据中融化的部分c.data

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

其次,您subject应该是Subject

第三,由于您同时将美学xy论点都传递给美学,因此您应该这样做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)

这是情节:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章