しかし通常のやり方だと関数内で縦と横がスケーリングされてしまうので、ピクセル単位で期待通りのサイズの絵を出力するのが難しい。
マージンをゼロにしてプロット領域のみにし、プロットの外枠を消し、カラーキーを消すと、1ピクセルに1つの値を配置することができる。
When you would like to see the information in a table or matrix at a glance, draw a level plot. It can be done with the function levelplot() in the lattice package.
It seems that the function automatically scales the plot, making it difficult to get a plot with defined scales.
By removing the margins, border lines and colorkey, you can get a plot in which a square of 1 x 1 pixel is filled with a value-related color.
# テスト用のマトリックスを作る。乱数の絶対値。
# Make a matrix with randomly produced values for a test.
x <- rnorm(20, mean = 0.5, sd = 0.3)
x <- abs(x)
m <- matrix(x, nrow = 4)
# パッケージをロードする。
# Load the package.
library(lattice)
# マージンゼロのテーマを定義する。参考サイトはこちら。
# Define the theme.
theme.x <- list(
layout.heights = list( # マージンをゼロに
top.padding = 0,
main.key.padding = 0,
key.axis.padding = 0,
axis.xlab.padding = 0,
xlab.key.padding = 0,
key.sub.padding = 0,
bottom.padding = 0),
layout.widths = list(
left.padding = 0,
key.ylab.padding = 0,
ylab.axis.padding = 0,
axis.key.padding = 0,
right.padding = 0
),
axis.line = list(lwd = 0) # 外枠を消す
)
# 保存先に移動する。
# Change the working directory.
setwd("test")
# レベルプロットをPNGとして保存する。
# Draw a level plot and save it as a PNG.
width <- nrow(m)
height <- ncol(m)
filename <- "m.png"
png(filename = filename, width = width, height = height)
levelplot(m, par.settings = theme.x, xlab = NULL, ylab = NULL,
scales = list(draw = FALSE), colorkey = FALSE)
dev.off()
こうして得たPNGファイルは、X軸とY軸の表示もなく、色と値の関係も分からないが、1ピクセルに1つの値が入っているので取扱いやすい。
# The resulting PNG file does not have the XY-axises or colorkey. However, as it is completely in a pixel-based format, it may be good for some purposes.
と、思いきや、Keynote ver. 6 以降に張り付けようとすると、PNGの画質が劣化する問題が生じる。この問題を回避するには、png()ではなくpdf()を使用するのが良さそう。pdf()は細い外枠が加えられるが、おそらく支障のないレベル。
# レベルプロットをPDFとして保存する。
# pdf()のサイズはピクセルではなくインチなので注意。
width <- nrow(m) / 72
height <- ncol(m) / 72
filename <- "m.png"
pdf(filename = filename, width = width, height = height)
levelplot(m, par.settings = theme.x, xlab = NULL, ylab = NULL,
scales = list(draw = FALSE), colorkey = FALSE, useRaster = FALSE)
dev.off()
pdf()を使うとき、levelplot()にuseRaster=TRUEを与えると、keynoteに載せたときに絵が変になる。
0 件のコメント:
コメントを投稿