是否可以仅对 facet_wrap 的方面进行重新排序,而不对基础因子水平进行重新排序?

Is it possible to reorder only the facets of facet_wrap, without reordering the underlying factor levels?

示例数据框:

df <- data.frame(x=rep(1:10,4),y=rnorm(40),Case=rep(c("B","L","BC","R"),each=10))

我可以将每个时间序列绘制在自己的方面:

ggplot(df,aes(x=x,y=y,color=Case)) + geom_line()+facet_wrap(~Case,nr=2,nc=2)

现在,假设我想将构面顺序更改为(从左上角开始,沿行到右下角)"L"、"B"、"R"、"BC"。这里关于 SO 的通常建议是 this。但是,如果我重新排序因子 Case 的水平,曲线的颜色也会改变。是否可以在不改变曲线颜色顺序的情况下重新排列小平面?我知道这听起来像是一个奇怪的问题。问题是我的报告正在进行中,在我已经向同事和管理层展示过的旧版本报告中,有多个或多或少像这样的图(没有 facet_wrap):

ggplot(df,aes(x=x,y=y,color=Case)) + geom_line()

换句话说,现在人们习惯将"B"与红色联系起来。如果我重新排序,"L" 将为红色,"B" 为绿色,依此类推。我已经能听到抱怨了……有什么办法可以解决这个问题吗?

按照您想要的顺序将数据复制到新列中。将新列用于分面,将旧列用于颜色。

df$facet = factor(df$Case, levels = c("L", "B", "R", "BC"))

ggplot(df, aes(x = x, y = y, color = Case)) + 
    geom_line() + 
    facet_wrap(~facet, nr = 2)