2016-05-26 38 views
0

私は、ジャーナルパブリケーション、値のタイトルを含む行があり、normalhighlightのデータポイントかどうかを示すデータフレームを持っています。私は、プロットがデータフレームの順序を保持したい。次のコードは、不均一に間隔を置いたy軸を生成します。ggplot2 scale_x_不均等な軸間隔をもたらす離散値

require(ggplot2) 

title <- c("COGNITION","MUTAT RES-DNA REPAIR","AM J PHYSIOL-CELL PH","AM J PHYSIOL-CELL PH","BLOOD", 
     "PNAS","BIOCHEM BIOPH RES CO","CLIN CANCER RES","BIOCHEM BIOPH RES CO","MOL THER") 
value <- c(-0.428, -0.637, -0.740, -0.782, -0.880, -1.974, -1.988, -2.029, -2.217, -2.242) 
indicator <- c(rep("highlight",5), rep("normal",5)) 

df <- data.frame(title, value, indicator) 

mycolors <- c("highlight" = "blue", "normal" = "red") 

x_axis_range <- c((min(df$value)), (max(df$value))) 

p <- ggplot(df, aes(x = title, y = value)) + 
    geom_point(aes(size=3, color=indicator)) + 
    coord_flip() + 
    scale_color_manual(values=mycolors) + 
    scale_y_continuous(limit=x_axis_range) + 

    # produces uneven spacing 
    scale_x_discrete(limits=df$title) + 

    theme(legend.position="none") 

show(p) 

Uneven y-axis

ggplotがMOL THERCLIN CANCER RESBLOODAM J PHYSIOL-CELL PHデータポイントの間に余分なスペースを追加している理由を私は知りません。私はscale_x_discrete()行を変更する場合:

scale_x_discrete(limits=df$title.1) + 
この間隔は均一になるが、データの順序は下から上からタイトルのアルファベット順に変更されます。

Even axis but alphabetical

なぜさえ間隔アウトlimits=df$titleの最後に.1を追加するのでしょうか?この均等性を維持するにはどうすればいいのですが、order()関数を使ってy軸に沿ってデータの順序を制御することはできますか?

答えて

1

df$titleを入力すると10個の値が与えられますが、プロットには8個の一意の値しかないため、離散スケールの間隔が不均一になるため、すでに使用されているレベルには2個のスペースがあります。

あなたのデータにはtitle.1列が存在しないためscale_x_discrete(limits=df$title.1)限界が実際に無視され提供し、その結果をNULL

あなたが文字に変換されdf$titleunique()値を提供する必要がある順序を取得するには(元の順序を維持することです)

ggplot(df, aes(x = title, y = value)) + 
    geom_point(aes(size=3, color=indicator)) + 
    coord_flip() + 
    scale_color_manual(values=mycolors) + 
    scale_y_continuous(limit=x_axis_range) + 
    scale_x_discrete(limits=unique(as.character(df$title)))+ 
    theme(legend.position="none") 
+0

パーフェクト!素晴らしい答え。 – tn3rt

関連する問題