使用条形图绘制条形图,按组名称分组/着色

时间:2011-08-01 11:54:18

标签: r plot colors histogram

这个CSV格式的数据集

GO Biological Process,regulation of lipid metabolic process,1.87E-35
GO Biological Process,acute inflammatory response,3.21E-37
GO Biological Process,response to insulin stimulus,1.05E-38
GO Biological Process,steroid metabolic process,4.19E-39
GO Biological Process,cholesterol metabolic process,1.19E-40
GO Biological Process,cellular response to chemical stimulus,5.87E-42
GO Biological Process,alcohol metabolic process,5.27E-43
GO Biological Process,sterol metabolic process,2.61E-43
GO Biological Process,lipid homeostasis,1.12E-44
GO Biological Process,response to peptide hormone stimulus,1.29E-45
GO Biological Process,monocarboxylic acid metabolic process,2.33E-54
GO Biological Process,cellular ketone metabolic process,5.46E-74
GO Biological Process,carboxylic acid metabolic process,2.41E-76
GO Biological Process,organic acid metabolic process,5.30E-79
Pathway Commons,FOXA transcription factor networks,7.40E-61
Pathway Commons,FOXA2 and FOXA3 transcription factor networks,1.39E-64
Transcription Factor Targets,"Targets of HNF6, identified by ChIP-chip in hepatocytes",1.77E-32
Transcription Factor Targets,"Targets of HNF1alpha, identified by ChIP-chip in hepatocytes",3.87E-65
Transcription Factor Targets,"Targets of HNF4alpha, identified by ChIP-chip in hepatocytes",1.38E-131

我希望能够创建一个如下所示的情节(条形图?): enter image description here

其中第1列中的三个不同组以相同颜色组合在一起,第3列从最大到最小排序。 上面的图是用excel制作的,但我希望能够在R中正确使用它。 到目前为止,我得到的是绘制的第2和第3列,我无法获得按第1列分组的条形图。


我按照推荐的方式尝试了ggplot。这就是我得到的(它看起来很棒):

library(ggplot2)
ggplot(tmp, aes(x=tmp$V2, y=log(tmp$V3), fill=tmp$V1)) +
geom_bar(stat="identity") +
coord_flip() +
scale_y_log()

how

但是,我需要找出如何“反转”轴,如[0,1e-130](例如,条形图从左到右,如上例所示)

1 个答案:

答案 0 :(得分:5)

ggplot包中的ggplot2相当简单。您可以通过在绘图中指定填充颜色并将数据中的列映射到填充来实现此目的,即aes(..., fill=group)

library(ggplot2)
dat <- data.frame(
    label=LETTERS[1:10],
    value=10:1,
    group=letters[c(1,1,2,2,2,3,3,3,3,3)]
)

dat
   label value group
1      A    10     a
2      B     9     a
3      C     8     b
4      D     7     b
5      E     6     b
6      F     5     c
7      G     4     c
8      H     3     c
9      I     2     c
10     J     1     c

ggplot(dat, aes(x=label, y=value, fill=group)) + 
    geom_bar(stat="identity") +
    coord_flip()

enter image description here