2

再現可能な例を次に示します。

最初にこの例に基づいて関数を作成しますhttps://github.com/hadley/ggplot2/wiki/labeller次に、データとグラフを提供します

label_wrap_gen <- function(width = 100) {
  function(variable, value) {
    lapply(strwrap(as.character(value), width=width, simplify=FALSE), 
           paste, collapse="\n")
  }
}

Data <- data.frame(Language=c("C++","C++","C++", "Java","Java","Java","Java", "PythonhasaREALLYWAYTOOlonglabel"), 
                Files=c(400, 210, 35,55,330,220,213,76), 
                Difficulty=c("a","b","c","d","e","f","g","h"), 
                stringsAsFactors=FALSE)

g <- ggplot(Data,aes(x=Difficulty,y=Files,fill=Difficulty))  #replaced fill=feetype,
h <- g + geom_bar(stat="identity",position="dodge") +   facet_grid(.~ Language, scales = "free_x", space="free",labeller=label_wrap_gen(width=.1)) 
h

多くの場合、プロットの端からはみ出す「PythonhasaREALLYWAYTOOlonglabel」のラベルを持つ ggplot グラフを生成します。

geom_bar次のリンクからさまざまな幅 で遊んでみましたが、あまり役に立ちません: ggplot2 のバー プロットでバー間のスペースを増やす方法は?

ここで何か助けはありますか?本当にありがとう。

4

2 に答える 2

4

「reallylonglabel」をスペースで区切ると、意図したとおりに動作します。

 "Python has a REALLY WAY TOO long label"  # will be handled correctly

わかった。あなたのコメントへ: これは、labeller最初に任意のスペース ( の値が小さい場合width) で分割され、次に 5 を超える長さの文字列で分割される新しい関数です。

label_wrap_gen2 <- function(width = 100) {
  function(variable, value) {
    inter <- lapply(strwrap(as.character(value), width=width, simplify=FALSE), 
           paste, collapse="\n")
    inter <- gsub("(.{5})", "\\1\n",inter)
  }
}

また、「幅」にそれほど厳密ではない引数を指定すると、5 ~ 10 の範囲の文字単位の幅で幅の引数を受け入れることができます。

label_wrap_gen3 <- function(width = 100) {
  function(variable, value) {
    inter <- lapply(strwrap(as.character(value), width=width, simplify=FALSE), 
           paste, collapse="\n")
    inter <- gsub(paste0("(.{",width,"})"), "\\1\n",inter)
  }
}

# Seems to deliver expected results when called with:
  ... + facet_grid(..., labeller=label_wrap_gen3(width=5) )
于 2013-07-12T05:33:57.807 に答える
0

これまでの回答はテキストの折り返しに役立ちますが、ラベルは依然として読みにくいままです。私は、関心のある変数の両側にゼロの値をいくつか追加することに決め、関心のある要素のスペースを含むハイフンでつながれた名前を手動で追加し、"PythonhasaREALLYWAYTOOlonglabel" を "PythonhasaREALLY-WAYTOOlonglabel" に変更しました。私は今のところもっと良いと思います。おそらく「PythonhasaREALLY-WAYTOOlonglabel」の両側に大きすぎるスペースが残りますが、必要なスペースが得られます。

次のコードを使用します。

label_wrap_gen <- function(width = 100) {
  function(variable, value) {
    lapply(strwrap(as.character(value), width=width, simplify=FALSE), 
           paste, collapse="\n")
  }
}

Data <- data.frame(Language=c("C++","C++","C++", "Java","Java","Java","Java", "PythonhasaREALLY- WAYTOOlonglabel","PythonhasaREALLY- WAYTOOlonglabel","PythonhasaREALLY- WAYTOOlonglabel"), #note that I add a hyphen here and two placeholders that will have 0 values
                   Files=c(400, 210, 35,55,330,220,213,0,76,0), #note that I add two 0 values here
                   Difficulty=c("a","b","c","d","e","f","g","h","i","j"), 
                   stringsAsFactors=FALSE)

Data
g <- ggplot(Data,aes(x=Difficulty,y=Files,fill=Difficulty))  #replaced fill=feetype,
h <- g + geom_bar(stat="identity",position="dodge") +   facet_grid(.~ Language, scales = "free_x", space="free",labeller=label_wrap_gen(width=.1)) 

左右のスペースをもう少し狭くする方法はあるのかもしれませんが、まだその方法がわかりません...

于 2013-07-12T21:40:38.337 に答える