reorderを使ってggplotの棒グラフの並び順を降順にする方法
# サンプルデータの作成
fruits <- c("apple","durian","orange")
count <- c(2, 1, 3)
df <- data.frame(fruits, count)
df # 中身の確認
fruits count
1 apple 2
2 durian 1
3 orange 3
このデータを使って、ggplotで棒グラフを描いてみると、
library(ggplot2)
ggplot(df, aes(x=fruits, y=count))
+ geom_bar(stat="identity")
当然ながら、棒の順番はデータ通りに、2、1、3と並びますね。
これをソートしたい場合は、reorderを使います↓
ggplot(df, aes(x=reorder(fruits, count), y=count)) +
geom_bar(stat="identity")
x軸はfruitsなんだけど、reorder関数の第二引数であるcountの値で並べ替えてから使ってね、という指定です。
で、次の課題です。
reorderを使うと、昇順で1、2、3という並びになりましたが、これを降順の3、2,1という並びにしたいときは、どうやればいいか。
データフレームをソートするときなんかに使うorder関数でいうところの「decreasing=TRUE」みたいな指定があればいいのですが、reorder関数にはそのようなオプションはなさそうです。
で、実はごく簡単で、reorderの第二引数(count)の値の正負が逆になれば、順番も逆になるじゃんという理屈です。
ggplot(df, aes(x=reorder(fruits, -count), y=count)) +
geom_bar(stat="identity")
無事、降順に並んでくれました。
fruits <- c("apple","durian","orange")
count <- c(2, 1, 3)
df <- data.frame(fruits, count)
df # 中身の確認
fruits count
1 apple 2
2 durian 1
3 orange 3
このデータを使って、ggplotで棒グラフを描いてみると、
library(ggplot2)
ggplot(df, aes(x=fruits, y=count))
+ geom_bar(stat="identity")
![]() |
並び順はデータのまま |
当然ながら、棒の順番はデータ通りに、2、1、3と並びますね。
これをソートしたい場合は、reorderを使います↓
ggplot(df, aes(x=reorder(fruits, count), y=count)) +
geom_bar(stat="identity")
![]() |
reorderすると昇順に並ぶ |
x軸はfruitsなんだけど、reorder関数の第二引数であるcountの値で並べ替えてから使ってね、という指定です。
で、次の課題です。
reorderを使うと、昇順で1、2、3という並びになりましたが、これを降順の3、2,1という並びにしたいときは、どうやればいいか。
データフレームをソートするときなんかに使うorder関数でいうところの「decreasing=TRUE」みたいな指定があればいいのですが、reorder関数にはそのようなオプションはなさそうです。
で、実はごく簡単で、reorderの第二引数(count)の値の正負が逆になれば、順番も逆になるじゃんという理屈です。
ggplot(df, aes(x=reorder(fruits, -count), y=count)) +
geom_bar(stat="identity")
![]() |
reorder関数の第二引数にマイナスをつければ降順にできる |
無事、降順に並んでくれました。
統計解析ソフトRについて質問です。
返信削除現在Rを使ってヒストグラムを作成しています。
setwd("~/Desktop/フォルダ名")
data =read.delim("v3200.txt")
data
水深の列
1 -33405.53 -62663.83 1.8885700 0.8989190077
2 -35688.48 -62664.00 0.8854250 0.9972982260
3 -37800.50 -62465.69 1.8864100 0.9910584860
4 -39989.51 -62899.94 1.9999200 0.9970147766
5 -35678.66 -62890.38 0.9999480 0.8998909976
6 -34611.59 -62685.03 1.9999900 0.6807515433
7 -38872.95 -62672.99 1.9999600 0.0826051085
8 -35893.69 -62870.33 0.0000460 0.7810266672
9 -35882.44 -61572.65 1.9999500 0.9979048205
10 -39280.47 -64630.71 1.997600 0.7660534729
11 -389279.30 -68870.50 0.9921790 0.8906962249
12 -36876.83 -68892.88 1.9966600 0.9065134964
13 -39788.92 -60025.14 0.0052650 0.7875685450
14 -37969.13 -68858.75 0.8831080 0.8875156891
15 -34779.59 -67813.83 0.8690920 0.8846281069
16 -33600.82 -62578.16 1.5639400 1.8858529066
17 -33499.68 -60832.03 0.6683220 0.0971105862
18 -30737.76 -66757.98 1.9077800 1.9706864073
19 -35674.45 -62305.39 0.0711924 0.0085407764
20 -34461.17 -64570.41 0.7782490 0.7604053829
21 -34551.14 -67807.60 0.7758240 0.0909048846
22 -34552.56 -68645.80 0.4439860 0.9067945335
23 -34787.35 -67076.87 0.4646793 0.7619260335
24 -34998.02 -68114.42 1.8713500 0.5472032673
25 -34789.14 -68155.71 0.7827780 0.5629358775
26 -34782.46 -69142.34 0.7804080 0.6683093416
27 -34674.45 -69200.19 1.8803600 0.0831627192
28 -34675.27 -67172.56 0.6854500 0.8984824022
29 -34673.32 -67191.90 1.5949500 1.8839635220
30 -34576.56 -67231.98 2.9751000 0.8892431819
31 -34567.17 -62260.64 1.6830200 0.8859022197
hist(data[,3])
上記の方法で水深のヒストグラムを一つ作成しています。
しかし、フォルダ内には、v3200.txtから3200秒毎のテキストが100個あります。
v6400.txt v9600.txt v12800.txt .......となっています。
これらをそれぞれ一回ずつ水深のヒストグラムにすることは可能なのですが、100個同時にヒストグラムを作るプログラムを教えて欲しいです。
もう、自己解決しちゃってるかもしれませんが・・・
返信削除複数のファイル名のベクトルを取得して、それでループを回します。
その中で、ファイルを読み込んで、描画して書き込む、
という処理を行えばOKです。
files <- list.files(path, full.names=T)
for(file in files){
d <- read.csv(file)
outfile <- sub(".csv", ".png", file) #出力ファイル名を作る
png(outfile)
hist(d[,1])
dev.off()
}