2017-06-22 10 views
0

私はまだRに新しいです。私は彼のプロットのデザインの1つが再現するのは難しいと証明していますが、友人がグラフを再現するのを助けることに同意しました。これは、彼がY軸ブレークを挿入した後、バープロット上にスケール変更を挿入したためです。これは、下の例の図で示されています。 Example image of plotスケール変更のYブレークR

これは予期しないことですが、実装が難しいです。私が使用して試みた:

barplotを()#veryハードを全ての要素を実装するために、グループ化されたbarplots

ggplot()#を可能とする)(それ

gap.barplotしない#does作ることができませんでしたかなりの時間をかけて基礎を習得した後、軸を壊すことはできません

誰にもRでこれをプロットする直感的な方法がありますか? 注:この情報を表示する最良の方法は、データをログに変換してスケールに合わせることですが、私は2つのプロットオプションを手動で提案したいと考えています。

誰でもでテストしたい場合、一部の集計データを以下に示す。

AAP Sex min  max  mean   sd   
1 12d Female 100.97 702.36 444.07389 197.970342 
2 12d Male 24.69 1090.15 469.48200 262.893780 
3 18d Female 195.01 4204.68 1273.72000 1105.568111 
4 18d Male 487.75 4941.30 1452.37937 1232.659688 
5 24d Female 248.58 3556.11 1583.09958 925.263382 
6 24d Male 556.60 4463.22 1589.50318 973.225661 
7 3d Female 4.87 16.93 12.86571 4.197987 
8 3d Male 3.23 16.35 8.13000 5.364383 
9 6d Female 3.20 37.63 15.07500 11.502331 
10 6d Male 4.64 94.93 28.39300 30.671206 
+1

[This](https://stackoverflow.com/questions/19612348/break-x-axis-in-r)少しお手伝いします。 –

+3

これは本当に悪いプロットです。あなたがすでに指摘したように、ログ変換を行ったり、@AEBilgrauのリンクで推奨されているように、 'facet_wrap'を使って' scales = 'free'という2つのプロットにプロットを分割します。 – LAP

+0

リンクのための@AEBilgrauをありがとう、はい私は前にそのスレッドを読んでいたし、より単純な解決策があるかどうか疑問に思った。私がやっていることは、最初に私の提案をログに変換し、あなたのものや他の人のコメントを使って私の友人にこの種のプロットが冗談であることを納得させることです。私はあまりにも多くの科学者が低い統計基準に従うのが怖いです... – Scientist

答えて

2

関わる基本的な手順は、あなたが使用するのと同じ方のグラフィックパッケージです:

  • はYにデータを変換しますあなたが望むスケール
  • スケールの中断の何らかの指標を提供する
  • 新しいスケールを示すようにy軸を更新する

のでggplotの例では、一例だと、私はまったく同じエラーバーを持っていない、そして得られた出力はおそらくいないことに注意してください

library(ggplot2) 
dput (dat) 
#structure(list(AAP = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 
#4L, 5L, 5L), .Label = c("12d", "18d", "24d", "3d", "6d"), class = "factor"), 
#Sex = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Female", 
#"Male"), class = "factor"), min = c(100.97, 24.69, 195.01, 
#487.75, 248.58, 556.6, 4.87, 3.23, 3.2, 4.64), max = c(702.36, 
#1090.15, 4204.68, 4941.3, 3556.11, 4463.22, 16.93, 16.35, 
#37.63, 94.93), mean = c(444.07389, 469.482, 1273.72, 1452.37937, 
#1583.09958, 1589.50318, 12.86571, 8.13, 15.075, 28.393), 
#sd = c(197.970342, 262.89378, 1105.568111, 1232.659688, 925.263382, 
#973.225661, 4.197987, 5.364383, 11.502331, 30.671206)), .Names = c("AAP", 
#"Sex", "min", "max", "mean", "sd"), class = "data.frame", row.names = c(NA, 
#-10L)) 

#Function to transform data to y positions 
trans <- function(x){pmin(x,40) + 0.05*pmax(x-40,0)} 

yticks <- c(0, 20, 40, 500, 1000, 1500, 2000) 

#Transform the data onto the display scale 
dat$mean_t <- trans(dat$mean) 
dat$sd_up_t <- trans(dat$mean + dat$sd) 
dat$sd_low_t <- pmax(trans(dat$mean - dat$sd),1) # 

ggplot(data=dat, aes(x=AAP, y=mean_t, group=Sex,fill=Sex)) + 
    geom_errorbar(aes(ymin=sd_low_t, ymax=sd_up_t),position="dodge") + 
    geom_col(position="dodge") + 
    geom_rect(aes(xmin=0, xmax=6, ymin=42, ymax=48), fill="white") + 
    scale_y_continuous(limits=c(0,NA), breaks=trans(yticks), labels=yticks) + 
    labs(y="Relative titer of CLas") 

Output plot

のようになります。 ggplot2の作者であるHadley Wickhamにお願いします。

+0

これはとても深く、ありがとう!それにもかかわらず、私は彼を説得するために、最初に非常にきれいなログ変換バージョンを準備しています。エラーバーでは、はい、私はすでに元のプロットされたSEの代わりにSDにデータサマリーを変更していましたが、ここで注意するのを忘れました。 – Scientist

関連する問題