2

ヒストグラムの下に同じ分布を示すボックスプロットが必要です。以下のコードはほとんど機能しますが、レイヤーcoord_flip()だけでなくすべてのレイヤーに適用されていgeom_boxplotます。

plot1<-ggplot(newdatahistogram, aes_string(x=newdatahistogram[RawLocation])) + 
          xlab(GGVar) + ylab("Proportion of Instances") + 
          geom_histogram(aes(y=..density..), binwidth=1, colour="black", fill="white",origin=-0.5) + 
          scale_x_continuous(limits=c(-3,6), breaks=seq(0,5,by=1), expand=c(.01,0)) +
          geom_boxplot(aes_string(x=-1, y=newdatahistogram[RawLocation])) + coord_flip()

coord_flip()単一のレイヤーに適用するにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

2

ちょっとしたハックで動作するようになりました。

plot1 <- ggplot(newdatahistogram, aes_string(x=newdatahistogram[RawLocation], fill=(newdatahistogram[,"PQ"]))) + 
  xlab(GGVar) + ylab("Proportion of Observation") + 
  geom_histogram(aes(y=..density..), binwidth=1, colour="black", origin=-0.5) +
  scale_x_continuous(limits=c(-1,6), breaks=seq(0,5,by=1), expand=c(.01,0)) +
  scale_y_continuous(limits=c(-.2,1), breaks=seq(0,1,by=.2))
  theme(plot.margin = unit(c(0,0,0,0), "cm"))      

plot_box <- ggplot(newdatahistogram) +
  geom_boxplot(aes_string(x=1, y=newdatahistogram[RawLocation])) + 
  scale_y_continuous(breaks=(0:5), labels=NULL, limits=c(-1,6), expand=c(.0,-.03)) + 
  scale_x_continuous(breaks=NULL) + xlab(NULL) + ylab(NULL) +
  coord_flip() + theme_bw() +  
  theme(plot.margin = unit(c(0,0,.0,0), "cm"),
        line=element_blank(),text=element_blank(),
        axis.line = element_blank(),title=element_blank(), panel.border=theme_blank())

PB = ggplotGrob(plot_box)
plot1 <- plot1 + annotation_custom(grob=PB, xmin=-1.01, xmax=5.95, ymin=-.3,ymax=0)

これにより、回転した箱ひげ図がグロブ オブジェクトとして保存され、ヒストグラムの下のプロットに挿入されます。

スケールを揃えるために拡張要素を少しいじる必要がありましたが、うまくいきました!

真剣に、ggplot は cord_flip() なしで利用可能な水平ボックスプロットを持っているべきだと思います... ボックスプロットコードを編集しようとしましたが、私には難しすぎました!

画像を投稿しようとしましたが、評判が十分ではありません

于 2013-09-09T03:33:41.037 に答える
1

できません:coord_flip常にすべてのレイヤーに作用します。ただし、次の 2 つの選択肢があります。

  • ここでのソリューションはgrid.arrange()、限界ヒストグラムを追加するために使用する方法を示しています。(質問のコメントは、同じことを行うための優れた base-R の方法にもリンクしています)
  • プロットの 4 つの側面のラグ プロットを使用して密度を示すことができます。plot1 + geom_rug(sides='r')

    ggplot(mpg, aes(x=class, y=cty)) + geom_boxplot() + geom_rug(sides="r")

ここに画像の説明を入力

于 2013-09-08T00:05:08.823 に答える