从数据框创建条形图

17

我在R中有一个类似于图片顶部的数据框。

是否有可能创建像下面这样的条形图?

数据框:

      X1   X2   X3  
 --- ---- ---- ---- 
  A    2   3    4   
  B    4   2    1   
  C    1   NA   NA  

条形图:

----------------------------
|                          |
|       #    #             |
|    #  #    #             |
| #  #  #    #  #          |
| #  #  #    #  #  #    #  |
----------------------------
  X1 X2 X3   X1 X2 X3   x1
     A           B       C

如果您需要 ASCII 输出,请尝试使用 txtplot 包。 - Tyler Rinker
抱歉,这只是一个示例;) 我想要一个像barplot函数生成的图形。 - ElPatzo
你可能想要更改你的问题标题吗?实际上,你想从数据框中创建一个条形图,而不是相反。 - Beasterfield
2个回答

31
使用基础图形,您可以简单地完成此操作:
mydf <- data.frame( X1=c(A=2, B=4, C=1), X2=c(3,2,NA), X3=c(4,1,NA) )
barplot(t(as.matrix(mydf)), beside=TRUE)

使用额外的 axis 调用可以让标签更像问题中的样式。

3
这应该是被接受的答案 - 为什么要使用两个库来完成这么简单的任务? - Bergrebell
如果你有一个大的数据框,将其转换为矩阵再转换为表格可能会增加很多开销。 - wordsforthewise
@wordsforthewise,如果数据框如此庞大以至于这种开销甚至不值一提(更不用说成为问题了),那么条形图可能根本不是最好的可视化方式。 - Greg Snow

20

假设您不想要ASCII输出,这里提供使用ggplot2的解决方案:

# load / generate your data
mydf <- data.frame( X1 = c(2,4,1), X2 = c(3,2,NA), x3 = c(4,1,NA), row.names=c("A","B","C") )
mydf$Category  <- row.names(mydf)

# bring your data to long format as needed by ggplot
library(reshape2)
mydf.molten <- melt(mydf, value.name="Count", variable.name="Variable", na.rm=TRUE)

# plot and facet by categories
library(ggplot2)
qplot( data=mydf.molten, x = Variable, y = Count, geom="bar", stat = "identity" ) + facet_wrap( "Category" )

输入图像描述

若需要进一步了解,建议查阅ggplot2手册,特别是关于geom_barfacet_wrap章节。


你的代码出现了以下错误: `> mydf.molten <- melt(mydf, value.name="Count", variable.name="Variable", na.rm=TRUE) Using Category as id variables
qplot( data=mydf.molten, x = Variable, y = Count, geom="bar", stat = "identity" ) + facet_wrap( "Category" ) Error: stat_count() must not be used with a y aesthetic. In addition: Warning message: stat is deprecated `
- Mona Jalal
@Mona Jalal; ggplot2自2013年以来发生了很大变化,特别是从1.xxx升级到2.xxx版本。 - cuttlefish44

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接