8

我已经寻找这个问题的答案很长时间了,但我一直无法找到答案。

这是问题所在:我有一个包含以下变量的数据框:流速 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 创建一个直方图,让我看到流速和密度之间的关系(水和非常低、非常稀疏和低、稀疏和低等所有 25 种可能的组合)。我已经尝试创建新因素,将 d.factor 和 f.factor 绑定到数据框,将这两个因素绑定在一起等,但没有结果,你们知道如何解决这个问题吗?

我试过包括我制作的直方图,但我认为我没有足够的声誉来做这件事。

感谢你的帮助!

4

1 回答 1

10

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

在此处输入图像描述

如果您希望相邻级别的颜色更加突出,您可以做的一件事是使用 生成颜色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)

在此处输入图像描述

于 2013-04-02T20:55:37.817 回答