使用facet_wrap和gather时对图重新排序

时间:2018-08-03 11:25:43

标签: r ggplot2

我有一个数据集(称为X3.scaled),该数据集包含要绘制在直方图中的化学数据,该数据具有以下基本特征:

hadoop --config  ~/ignite-conf jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar wordcount input output1

通过使用collect和facet_wrap我可以得到想要的图,但问题是它们是按字母顺序而不是我想要的顺序显示的:

> dim(X3.scaled)
[1] 28 40
> class(X3.scaled)
[1] "matrix"

我想要的顺序与矩阵/数据框中的顺序相同,这与列名和键的顺序相同。我已经在collect()中尝试过factor_key = TRUE,在关键向量和数据帧上设置因子级别是自已的,但这不起作用:

dim(X3.scaled)
[1] 28 40

key.X3<-colnames(X3.scaled)
X3.df<-as.data.frame(X3.scaled)
gather(X3.df, key = key.X3, value, )

ggplot(gather(X3.df), aes(value)) +  geom_histogram(bins = 10) +           
facet_wrap(~key, scales = 'free_x')

我考虑使用以下示例:controlling order of facet_grid/facet_wrap in ggplot2?How to change the order of facet labels in ggplot (custom facet wrap labels),但是他们不使用collect(),而且我不知道如何在不进行聚集的情况下进行操作(并且没有Google fu要求找到解决方案)。我也查看了Separate ordering in ggplot facets,但我认为这不是一个好的解决方案,因为我只关心面板的顺序而不是标签。

我认为最好的解决方案是像Use forcat::fct_reorder to sort plots within facet_wrap之类的东西,但是我不够熟练和聪明,无法重写示例中使用的代码,在该示例中,他们按Country = rows绘制面板(据我所知)来绘制面板按我想要的列。对于这个愚蠢的问题,我真的感到很抱歉,我相信有一个非常简单的解决方案,但是我似乎无法自己找到它。

1 个答案:

答案 0 :(得分:0)

尝试重新排序用于方面的因素的水平:

df$key <- factor(df$key, levels=c("first facet", "second facet", (in the order you want the facets))

请注意,如果您将收集的数据帧分配给变量,然后重新排列构面,然后调用ggplot,这将更加干净。