我已经找了很长时间来回答这个问题,但我找不到答案.
问题在于:我有一个包含以下变量的数据框:流速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'))
Run Code Online (Sandbox Code Playgroud)
我使用每个因子作为填充变量使用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)
Run Code Online (Sandbox Code Playgroud)
现在我想用ggplot创建一个直方图,让我看到流速和密度之间的关系(水和非常低,非常低,低,Sparce和低等,对于所有25种可能的组合).我已经尝试创建新的因素,将d.factor和f.factor绑定到数据框,将两个因素绑定在一起等等没有结果,你们有任何想法如何解决这个问题吗?
我已经尝试过包括我制作的直方图,但我认为我没有足够的声誉去做.
感谢你的帮助!
Mat*_*rde 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)
Run Code Online (Sandbox Code Playgroud)
