2因子直方图分析

时间:2013-04-02 20:46:49

标签: r ggplot2

我已经找了很长时间来回答这个问题但我找不到答案。

问题在于:我有一个data frame,其中包含以下变量:流速1(CH_SONAR),流速2(CH_SONAR_2T),密度(CH_DENSITY)以及两种流速之间的百分比差异( per_diff)。我为流速1创建了一个5级因子,为密度创建了另一个5级因子。

f.factor <- cut(p.pipeline$CH_SONAR_2T, 5, labels = c('Very Low','Low', 'Medium', 'High', 'Very High'))

d.factor <- cut(p.pipeline$CH_DENSITY, 5, labels = c('Water', 'Very Sparce', 'Sparce', 'Dense', 'Very Dense'))

我使用每个因子作为填充变量使用ggplot2进行绘制:

qplot(per_diff, data = p.pipeline, geom = "histogram", binwidth = 1, xlim = c(-5, 15), fill = f.factor)

qplot(per_diff, data = p.pipeline, geom = "histogram", binwidth = 1, xlim = c(-5, 15), fill = d.factor)

现在我想用ggplot创建一个直方图,让我看到流速和密度之间的关系(水和非常低,非常低,低,Sparce和低等,对于所有25种可能的组合)。我试过创建新的因子,将d.factor和f.factor绑定到数据框,将两个因素绑定在一起等等没有结果,你们有什么想法如何解决这个问题?

我已经尝试过包括我制作的直方图,但我认为我没有足够的声誉去做。

感谢您的帮助!

1 个答案:

答案 0 :(得分:10)

您可以使用fill=interaction(f.factor, d.factor)。未出现在图例中的组合,例如“Low.Very Sparce”表示没有属于这两个类别的观察值。

enter image description here

如果你想让相邻关卡的颜色更突出,你可以做的一件事就是用rainbow生成颜色,然后用轮子上相反的颜色交换每一种颜色。

col <- rainbow(length(levels(interaction(f.factor, d.factor))), v=.75, s=.5)
col.index <- ifelse(seq(col) %% 2, 
                    seq(col), 
                    (seq(ceiling(length(col)/2), length.out=length(col)) %% length(col)) + 1)
mixed <- col[col.index]
qplot(per_diff, data = p.pipeline, 
      geom = "histogram", binwidth = 1, xlim = c(-5, 15), 
      fill = interaction(f.factor, d.factor)) + scale_fill_manual(values=mixed)

enter image description here