忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Excel 2007のグラフ作成があまりにひどいので、
Rで折れ線グラフ (できあがりpdf) と棒グラフ (できあがりpdf) を描いてみよう。

折れ線グラフを描いてみよう
# データ入力
y1 <- c(1,2,3)
y2 <- c(3,4,1)
gdat <- cbind(y1, y2) #行列にする
rownames(gdat) <- c("a", "b", "c") # x軸の変数名をつけておく

# グラフ作成
par(bty="l") # グラフの左と右の軸しかかかない
matplot(gdat, type = "b", pch = 1:length(gdat[,1]), col = 1, lwd = 1, xlim = c(0.8, 3.2), ylim = c(0, 5), xaxt="n", xlab = "abc")
### type = "b": 点と線のプロット、pch: プロット文字。丸とか三角とか。plot character? 。col: 色指定。1は黒。 lwd: 線とポイントの太さ。xlim, ylim: x, y軸の最小値と最大値。デフォルトだと上下左右の余裕がないので大きくした。 xaxt: x軸の変数名を消す。あとで書くので
axis(1, at = 1:3, labels = rownames(gdat))
### x軸の名前をつける。a, b, c
legend("topright", colnames(gdat), lty = 1:length(gdat[,1]), pch = 1:length(gdat[,1]), box.lty = 0)
### 左から、凡例位置、変数名、lty: プロット線の種類。グラフに合わせる。line type? 。pch: プロット文字。グラフに合わせる。box.lty: 0で凡例の枠線を消す

以下、エラーバーの作成

グラフの中に矢印を書こう、というarrows関数のパラメータをいじる。
具体的には、矢印の始点と終点を指定し、矢羽の角度を90度にして、両向きの矢印を描画する。便利なんだかそうでないんだか…
# 標準誤差データをつくる
y1e <- c(0.1, 0.2, 0.15)
y2e <- c(0.02, 0.3, 0.1)
# エラーバーの描画
arrows(c(1, 2, 3), c(y1, y2)-c(y1e, y2e), c(1, 2, 3), c(y1, y2)+c(y1e, y2e), angle = 90, length = 0.05, code = 3)
### 始点と終点をベクトルで指定する。3本引くので3要素。angleで矢羽の角度を90度にして、lengthで矢羽の長さを変える。codeはたぶん両向き矢印
### 下端のx座標: x軸の値と同じ、下端のy座標: y軸の値からエラーを引く、上端のx座標は下端と同じ、上端のy座標はエラーを加算


棒グラフで描いてみよう

データ生成
y1 <- c(1,2,3)
y2 <- c(3,4,1)
bgdat <- rbind(y1, y2)
colnames(bgdat) <- c("a", "b", "c")
### gdatをそのまま使うと列データ (y1, y2) がx軸になるので転置しておく。ちなみにt(gdat)で簡単に転置できる

グラフ作成

barx <- barplot(bgdat, beside = T, ylim = c(0, 5), xlab = "abc")
### beside: Fにすると (= デフォルト) 積み上げ棒グラフ。x軸に線を引くときはaxis.lty = 1 (ただしこれでも中途半端)
### 描画行い、かつbarxというオブジェクトに各バーのx軸の座標が行列として格納される。

## 凡例はbarplot内でlegend = rownames(bgdat) としてもいいが、細かい調整ができない。
## palette関数でグレースケールのパレットを呼び出し、legend内のfillで指定する。マンドクサ...
palette(grey.colors(nrow(bgdat)))
legend("topleft", rownames(bgdat), fill = c(1, 2), box.lty = 0)
### 凡例の位置、行名を使う、fillは変数名の横のボックス、指定しているのは塗りつぶす色、box.ltyは枠線けし

エラーバーのデータも行列にしておく

y1e <- c(0.1, 0.2, 0.15)
y2e <- c(0.02, 0.3, 0.1)
bar.e <- rbind(y1e, y2e)
arrows(barx[,1:3], bgdat[,1:3] - bar.e[, 1:3], barx[,1:3], bgdat[,1:3] + bar.e[, 1:3], angle = 90, length = 0.05, code = 3)


OpenOfficeの方が楽な気がするな…
PR
Comment
Trackback
Trackback URL

Comment form
Title
Color & Icon Vodafone絵文字 i-mode絵文字 Ezweb絵文字  
Comment
Name
Mail
URL
Password
プロフィール
HN:
tao
HP:
性別:
非公開
職業:
会社員
趣味:
アウトドア、自転車、ジョギング、英語学習
自己紹介:
・千葉在住のサラリーマンです。データ分析っぽいことが仕事。
・今年英検1級取得。今はTOEIC高得点を目指して勉強中。
・興味のあることは野球、アウトドア、英語学習、統計、プログラミング、PC関係などなど。
ブログ内検索
freead
順位表
プロ野球データFreak
セリーグ順位表
パリーグ順位表