如何为以下类型的数据绘制线条/条?

时间:2014-09-20 12:34:53

标签: r plot

b <- data.frame(head=c("a", "b", "c", "d", "e"),
                ab=c(1, 2, 3, 4, 5), bc=c(4, 5, 6, 7, 8), ca=c(2, 3, 4, 5, 6))

等等。

我想为不同的head值绘制(在这种情况下为5个单独的绘图),例如: a的不同值的abbcca的{​​{1}}的图表等等。 问题是,如果表格被调换,则更容易绘制这个,但这样做很困难。 示例,如果数据是这样的:

b

然后使用命令b <- data.frame(head=c("ab", "bc", "ca"), a=c(1, 4, 2), b=c(2, 5, 3), c=c(3, 6, 4), d=c(4, 7, 5), e=c(5, 8, 6)) 绘制a是很简单的。但是,如何以第一行所示的其他方式绘制相同的数据。

2 个答案:

答案 0 :(得分:1)

您可以使用reshape2将数据集b转换为预期的b

library(reshape2)
d1 <- dcast(melt(b,id.var="head"), variable~head, value.var="value")
d1
#  variable a b c d e
#1       ab 1 2 3 4 5
#2       bc 4 5 6 7 8
#3       ca 2 3 4 5 6

或者在这种情况下:

 b1 <- t(b[,-1])
 colnames(b1) <- b[,1]
  b1
  #   a b c d e
  #ab 1 2 3 4 5
  #bc 4 5 6 7 8
  #ca 2 3 4 5 6

如果您想在同一窗口上绘制5 barplots

  library(ggplot2)
  mb <- melt(b, id.var="head")
  ggplot(mb, aes(head, value))+ 
              geom_bar(aes(fill=variable), position="dodge", stat="identity") +
                     theme_bw()

enter image description here

如果您需要使用原始b数据集的5个单独条形图,则可以尝试:

  pdf("barplots.pdf")
  apply(b[,-1], 1, function(x) barplot(x))
  dev.off()

答案 1 :(得分:1)

&#39; barplot&#39;可以与原始b data.frame一起使用:

barplot(as.matrix(b[,-1]), beside=T, legend.text=b$head)

enter image description here

对于其他分组,转置数据(由@akrun指出):

barplot(t(as.matrix(b[,-1])), beside=T, legend.text=names(b)[2:4], names.arg=b$head)

enter image description here