1

こんにちは私は以下を生成しました:

ここに画像の説明を入力

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

 library(ggplot2,quietly=TRUE)
 args <- commandArgs(TRUE)
 data <-read.table(args[1],header=T,sep="\t")
 pdf(args[2])
 p1 <- ggplot( data,aes(x=Mutation,y=difference) ) +
 geom_bar( width=.75,aes(fill=as.factor(position),stat="identity"),position="dodge") +
 geom_errorbar(aes(y=difference, ymin=difference-difference_std,   ymax=difference+difference_std )) +
 theme(legend.key = element_blank()) +
 ylab(expression(Delta*"Energy (Design - Wild Type)" )) +
 xlab( "Mutation" ) +
 ylim(-2.5,2.5) +
 theme_bw() +
 theme(axis.text.x = element_text(angle = 90,size=9,hjust=1))+
 opts(legend.position="none")+
 ggtitle(expression("PG9 Mutational Analysis"))
 p1
 dev.off()

ご覧のとおり、塗りつぶしレイヤーを使用して位置をグループ化したので、それらをグループ化できます。理想的には、色でグループ化するのではなく、位置が変わったときに xbreak にブレークを入れたいと思います。

オレンジバー、オレンジバー、ブレーク、グリーンバー、ブレーク、シアンバー、ブレークなど...

*編集:

入力テーブルのデータは次のようになります。

position           Mutation       difference    difference_std
97             R97L             -0.3174848488298787 0.2867477631591484
97             R97N              0.5333956571765566 0.35232170408577224
99             A99H             -0.2294999853769939 0.24017957128601522
99             A99S             -0.45171049187057877    0.0013816966425459903
101            G101S             0.5315110947026147 0.08483810927415139
102            P102S            -0.04872141488960846    0.02890820273131048
103            D103Y             0.6692000007629395 0.07312815307204293
....

したがって、すべての位置がグループ化され、いずれかの側にブレークがあります。私が理にかなっていることを願っています。これを行う簡単な方法はありますか?

J

4

2 に答える 2

3

ファセットを使用するのが最も簡単な方法だと思います(質問のサンプルデータを使用)。ファセットの新しい変数を取得するには、まず、に従ってデータ フレームを並べ替えますMutation。次に、数値の列シーケンスpos2を使用してcumsum()追加する新しい列を追加します(@agstudyのアイデア)。 diff()position

df2<-df[order(df$Mutation),]
df2$pos2<-cumsum(c(0,diff(df2$position)) != 0)
df2
  position Mutation  difference difference_std pos2
3       99     A99H -0.22949999    0.240179571    0
4       99     A99S -0.45171049    0.001381697    0
7      103    D103Y  0.66920000    0.073128153    1
5      101    G101S  0.53151109    0.084838109    2
6      102    P102S -0.04872141    0.028908203    3
1       97     R97L -0.31748485    0.286747763    4
2       97     R97N  0.53339566    0.352321704    4

ファセットに新しい列pos2を使用します。theme()strip.text=とを使用するとstrip.background=、ストリップ テキストと灰色の背景を削除できます。

ggplot(df2,aes(x=Mutation,y=difference) ) +
  geom_bar( width=.75,aes(fill=as.factor(position),
                   stat="identity"),position="dodge") +
  geom_errorbar(aes(y=difference, ymin=difference-difference_std,  
                   ymax=difference+difference_std )) +
  theme(legend.key = element_blank()) +
  ylim(-2.5,2.5) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 90,size=9,hjust=1))+
  theme(legend.position="none")+
  theme(strip.text=element_blank(),
        strip.background=element_blank())+
  facet_grid(.~pos2,scales="free_x",space="free_x")

ここに画像の説明を入力

更新 - 空のレベル

その他の可能性は、バー (実際のレベル) の間にスペースが必要な場所にscale_x_discrete()引数と引数を使用して空のレベルを追加することです。limits=このアプローチの問題は、これらのレベルを手動で追加する必要があることです。

たとえば、前の例と同じデータ (順序付けられた質問データ) を使用します。

ggplot(df2,aes(x=Mutation,y=difference) ) +
  geom_bar( width=.75,aes(fill=as.factor(position),
           stat="identity"),position="dodge") +
  geom_errorbar(aes(y=difference, ymin=difference-difference_std, 
            ymax=difference+difference_std )) +
  theme(legend.key = element_blank()) +
  ylim(-2.5,2.5) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 90,size=9,hjust=1))+
  theme(legend.position="none")+
  scale_x_discrete(limits=c("A99H", "A99S","", "D103Y","","G101S",
                             "","P102S","","R97L", "R97N"))

ここに画像の説明を入力

于 2013-06-20T18:47:08.870 に答える
1

最初に、ラベルをグループ化する新しい変数を作成する必要があると思います。

 dat$group <- cumsum(c(0,diff(dat$position)) != 0)

  Mutation  difference position group
20    0wYpO  0.93746859        4     0
17    63L00 -0.57833783        4     0
3     6hfEp -1.01620448        3     1
1     FvAz4  0.09496127        2     2
8     ghNTj -1.10180158        3     3
14    GxYzD  0.41997924        3     3

それでは、プロットにギャップを追加するのは簡単な方法ではないと思います. しかし、グループごとに棒グラフを作成し、geom_text で遺伝子名を追加することができます。ここに最初のバージョンがあります。ggplot2 の経験が豊富な人が途中でテキストを調整するのを手伝ってくれることを願っています

ggplot( dat,aes(x=factor(group),y=difference) ) +
  geom_bar( width=.75,aes(fill=as.factor(Mutation)),stat="identity",
            position="dodge") +
  geom_text(aes(label=Mutation),position=position_dodge(height=0.9),angle=90)+
  theme_bw() + 
  opts(legend.position="none")

ここに画像の説明を入力

PS: 以下のコードを使用してデータを生成できます。

N <- 21
Mutation <- replicate(N,paste(sample(c(0:9, letters, LETTERS),
                                    5, replace=TRUE),
                             collapse=""))


difference <- rnorm(N)
position <- c(4, 4, 3, 2, 3, 3, 2, 3, 2,
              5, 2, 2, 2, 5, 5, 
              5, 2, 4, 5, 4, 2)
difference_std <- sd(difference)

dat <- data.frame(Mutation,difference)
dat <- dat[order(dat$Mutation),]
dat$position <- position
dat$group <- cumsum(c(0,diff(dat$position)) != 0)
于 2013-06-20T10:54:25.820 に答える