【问题标题】:Is it possible to reorder only the facets of facet_wrap, without reordering the underlying factor levels?是否可以仅重新排序 facet_wrap 的方面,而不重新排序基础因子级别?
【发布时间】:2016-12-14 13:25:59
【问题描述】:

示例数据框:

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”为绿色,依此类推。我已经可以听到抱怨......有什么办法摆脱这个吗?

【问题讨论】:

    标签: r ggplot2 facet-wrap


    【解决方案1】:

    只需按照您想要的顺序将数据复制到一个新列中即可。使用新列进行分面,使用旧列进行颜色。

    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)
    

    【讨论】:

    • 太棒了!在我的真实案例中,我不仅将 Case 映射到 color aestethic,还映射到 linetype one。因此,其他解决方案也将迫使 mr 手动设置 linetype 的比例。您的解决方案更简单。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多