web-dev-qa-db-ja.com

R ggplotを使用してx軸の目盛りラベル名、順序、箱ひげ図の色を変更する方法は?

Csvファイルを含むフォルダーがあり、それぞれにデータの2つの列があります:

0,red
15.657,red
0,red
0,red
4.429,red
687.172,green
136.758,green
15.189,red
0.152,red
23.539,red
0.348,red
0.17,blue
0.171,red
0,red
61.543,green
0.624,blue
0.259,red
338.714,green
787.223,green
1.511,red
0.422,red
9.08,orange
7.358,orange
25.848,orange
29.28,orange

次のRコードを使用して箱ひげ図を生成しています。

files <- list.files(path="D:/Ubuntu/BoxPlots/test/", pattern=NULL, full.names=F, recursive=FALSE)
files.len<-length(files)
col_headings<-c("RPKM", "Lineage")

for (i in files){
  i2<-paste(i,"png", sep=".")
  boxplots<-read.csv(i, header=FALSE)
  names(boxplots)<-col_headings
  png(i2)
  bplot<-ggplot(boxplots, aes(Lineage, RPKM)) + geom_boxplot(aes(fill=factor(Lineage))) + geom_point(aes(colour=factor(Lineage)))
  print(bplot)
  graphics.off()
}

次に、対応するx軸の色ラベルに一致するように箱ひげ図の色を変更します。また、x軸ラベルの名前とその順序も変更します。 ggplotまたはqplotを使用してこれを行う方法はありますか?

18
user2639056

@shadowの答えに基づいて、x軸のラベルを手動で変更する方法を次に示します。また、グラフと凡例の外観を改善するのに役立つ他のいくつかの変更を加えました。

colorder <- c( "green", "orange", "red", "blue")
bplot<-ggplot(temp, aes(Lineage, RPKM)) + 
    geom_boxplot(aes(fill=factor(Lineage))) + 
    geom_point(aes(colour=factor(Lineage))) + 
    scale_color_manual(breaks=colorder, # color scale (for points)
                     limits=colorder, 
                     values=colorder,
                     labels=c("hESC1","hESC2","hESC3","hESC4"),
                     name="Group") +
    scale_fill_manual(breaks=colorder,  # fill scale (for boxes)
                     limits=colorder, 
                     values=colorder,
                     labels=c("hESC1","hESC2","hESC3","hESC4")
                     name="Group") +
    scale_x_discrete(limits=colorder,labels=c("hESC1","hESC2","hESC3","hESC4")) +
    theme_bw()

labelsオプションをプロットのscale_x_discreteレイヤーに追加すると、軸ラベルを変更できます。 labelsscale_fill_manualscale_color_manualの両方に追加すると、凡例のラベルを変更できます。両方にnameを追加すると、凡例の見出しを変更できます。最後に、theme_bw()をプロットに追加して、背景を白にし、プロットの周囲に境界線を追加しました。お役に立てば幸いです!

enter image description here

33
rmbaughman

はい、これを行うことができます。つかいます scale_color_manualscale_fill_manualおよびscale_x_discrete 次のように:

# specify colors and order 
colorder <- c( "green", "orange", "red", "blue") 
bplot<-ggplot(boxplots, aes(Lineage, RPKM)) + 
  geom_boxplot(aes(fill=factor(Lineage))) + 
  geom_point(aes(colour=factor(Lineage))) + 
  scale_color_manual(breaks=colorder, # color scale (for points)
                     limits=colorder, 
                     values=colorder) +
  scale_fill_manual(breaks=colorder,  # fill scale (for boxes)
                    limits=colorder, 
                    values=colorder) +
  scale_x_discrete(limits=colorder)   # order of x-axis
6
shadow