-1

現在、 ggplot2 を使用して予測アルゴリズムの比較プロットを生成していますfacet_grid。サブプロットの順序を指定する方法はありますか? 私の場合、MSE で昇順に表示することに興味があります。どうやってやるの?ドキュメントを読んでfacet_gridも、ベルは鳴りません。

プロット コードは次のようになります。

ggplot(df_all, mapping=aes(x=t, y=value, color=label, shape=label)) +  
   geom_point() + ggtitle('Test vs. Predicted') + theme(legend.position='none') + facet_grid(. ~ group) + 
geom_segment(data=df_error_all, aes(x=df_error_all$x,y=df_error_all$y,xend=df_error_all$xend,yend=df_error_all$yend), size=0.3) + 
geom_segment(data=df_arrow_all, aes(x=df_arrow_all$x,y=df_arrow_all$y,xend=df_arrow_all$xend,yend=df_arrow_all$yend), size=0.3)
4

1 に答える 1

4

@joran などが述べたように、facet_grid の順序付けは因子列のレベルに基づいています。

relevel順序を変更するために使用できます。(元の列を変更するか、新しい列を作成します)

df_all[["newGroup"]] <- relevel(df_all[["group"]], "value1")

##  OR: 
df_all[["group"]] <- relevel(df_all[["group"]], "value1")

アップデート:

私の utils ファイルには次の関数がありますrelevel。ただし、@DWin が以下のコメントで指摘しているようにrelevel、 の値として複数のレベルでは機能しませんref

そのような状況でsetFactorOrderは、おそらく役に立ちます

setFactorOrder <- function(x, order=sort(levels(x))) { 
# Returns a factor ordered by `order`.  
# If order is missing, defaults to `levels(x)` if available, else to `sort(unique(x))`
# Useful for ggplot and elsewhere were ordering is based on the order of the levels

  if (!is.factor(x)) {
    warning("`x` is not a factor. Will coerce.")
    levs <- sort(unique(x))
    if (missing(order))
      order <- levs
  } else {
    levs <- levels(x)
  }

  # any values in order, not in levels(x)
  NotInx <- setdiff(order, levs)

  if (length(NotInx)) {
    warning ("Some values not in x:\n", paste(NotInx, collapse=", "))
  }

  # levels(x) not explicitly named in order
  Remaining <-  setdiff(levs, order)

  order <- c(setdiff(order, NotInx), Remaining)

  factor(x, level=order)
}

次のように、 の結果を割り当てる必要があることに注意してくださいsetFactorOrder

x <- setFactorOrder(x, c("value1", "value2"))

# or
df_all[["group"]] <- setFactorOrder(df_all[["group"]], c("Ketchup", "Catsup", "Mustard"))
于 2013-10-15T15:01:19.643 に答える