2009-08-28

ヒストグラムの作成


用目的で測定データをヒストグラムにして表示するスクリプトを紹介します。データは CSV 形式で、一行目がヘッダーになっています。この例では一列目のデータをヒストグラムにしています。 X Window 上で表示するのに加えて PNG 画像にも出力するようにしました。

# HISTOGRAM SAMPLE
library(KernSmooth)
# =============================================================================
# chart.hist
# =============================================================================

chart.hist <- function(tbl, val_x, gTitle = "", xLab = "data") {
x <- sort(tbl[, val_x])
h <- try(dpih(x), TRUE)
if (!is.numeric(h)) {
h <- 10**round(log(range(x)[2] - range(x)[1]))
}
bins <- seq(min(x) - 0.1, max(x) + 0.1 + h, by = h)

x_max <- max(x, na.rm = TRUE)
x_min <- min(x, na.rm = TRUE)
xLimit <- c(x_min, x_max)

hg <- hist(x, breaks = bins, freq = FALSE,
main = gTitle, xlab = xLab, xlim = xLimit,
col = "lightblue", cex.main = 1, family = "mono")

points(x, dnorm(x, mean(x), sd(x), log = FALSE),
type='l', col = "magenta", lwd = 1)
points(density(x), type = 'l', col = "orange", lwd = 1)
}
# =============================================================================
# open.png
# =============================================================================

open.png <- function(imgName, picWidth = 640, picHeight = 400) {
png(filename = imgName, width = picWidth, height = picHeight,
units = "px", pointsize = 14, bg = "white", res = NA)
}
# -----------------------------------------------------------------------------
# MAIN
# -----------------------------------------------------------------------------
# _____________________________________________________________________________
# READ CSV DATA

file.name <- "./sample_hist.csv"
tbl.data <- read.csv(file.name, header = T, as.is = T)
# _____________________________________________________________________________
# generate HISTOGRAM

head.x <- names(tbl.data)[1]
title.hist <- paste("SAMPLE (n = ", length(tbl.data[, head.x]), ")",
sep = "")
label.x <- "Measurement"
chart.hist(tbl.data, head.x, title.hist, label.x)
# _____________________________________________________________________________
# generate PNG FILE

open.png("sample_hist.png")
chart.hist(tbl.data, head.x, title.hist, label.x)
dev.off()
# ---
# END PROGRAM


実行例



Fedora で実行した例を示します。

$ R

R version 2.9.2 (2009-08-24)
Copyright (C) 2009 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
...
(途中省略)
...
'q()'と入力すればRを終了します。

> source("hist.R")
KernSmooth 2.23 loaded
Copyright M. P. Wand 1997-2009


X Window 上では以下の様に表示されます。

出力された PNG ファイルはこんな感じになります。

 

0 件のコメント: