2014/07/29
R
 >  EPS 保存で半透明カラーが消える
一昨日 ↓ の図を出力したが、実はこのグラフィックウィンドウから右クリックで「ポストスクリプトに保存」を選び EPS ファイルに保存すると色が消える。塗り色を半透明にしたから。この確認と対策のメモ。実行環境は 2014/07/28 を参照。


↓ 簡単な棒グラフを太い線で描き、半透明色を付けた。
dat = rnorm(10)
col = adjustcolor(rainbow(10), alpha=0.4)
windows(width=436/96, height=355/96)
par(cex=0.8, las=1, lend=1, mgp=c(20, 4, 0)/10, plt=c(10, 98, 7, 98)/100, tck=0.01)
plot(dat, col=col, lwd=30, type='h', xaxt='n', xlab='', ylab='', xlim=c(0.5, 10.2))
axis(1, col=NA, col.ticks=1)
abline(h=0)


↓ 右クリックで「ポストスクリプトに保存」を選択。デフォルトで EPS 出力になっており、そのまま保存する。もう一つ PS ファイルも選べるが今回は対象外。



↓ 保存した EPS を Illustrator CS5 で開くと、棒が全て消えている。色なしの棒になったのでなく、線自体ない(アウトライン表示で確認)。


↓ 一方、透明度を使わない場合。上のコードから alpha だけ削除して出力。このように塗り面積が広い時に rainbow() そのままだと色がキツいが、比較用。
dat = rnorm(10)
col = rainbow(10)
windows(width=436/96, height=355/96)
par(cex=0.8, las=1, lend=1, mgp=c(20, 4, 0)/10, plt=c(10, 98, 7, 98)/100, tck=0.01)
plot(dat, col=col, lwd=30, type='h', xaxt='n', xlab='', ylab='', xlim=c(0.5, 10.2))
axis(1, col=NA, col.ticks=1)
abline(h=0)


↓ 先と同様に EPS 保存し Illustrator CS5 で開くと、まず「カラーモード」の警告が出る。R が保存した EPS は RGB と CYMK 混在らしい。今回はどちらでも関係ない。



↓ 普通に色が EPS に保存されていた。



以上、半透明オブジェクトが消える問題の確認。たぶん R が保存する EPS のバージョンが、透明度設定に未対応の古いものだと思う。せめて色なしでもオブジェクトは保存されているといいが、完全に消えてしまうので困る。

対策として 2013/11/06(色に透明度を付け、そのまま不透明化)で書いた方法を使う。こんな所で役に立つとは思わなかった。当該のコードはわずか二行。↓ が先ほどの修正版。
dat = rnorm(10)
col = rainbow(10)

# 色に透明度を付け、そのまま不透明化
alp = 0.4
col = rgb(t(col2rgb(col) / 255 * alp
+ matrix(rep((1 - alp), 3 * length(col)), nrow=3)))

windows(width=436/96, height=355/96)
par(cex=0.8, las=1, lend=1, mgp=c(20, 4, 0)/10, plt=c(10, 98, 7, 98)/100, tck=0.01)
plot(dat, col=col, lwd=30, type='h', xaxt='n', xlab='', ylab='', xlim=c(0.5, 10.2))
axis(1, col=NA, col.ticks=1)
abline(h=0)
mtext(1, adj=0.1, line=-3, text='semitransparent -> opaque')


↓ 見かけ上は半透明の時と同じだが、実は不透明の「別の色」になっている。EPS 保存して Illustrator で開くと、確かに色がある。



↓ 確認。一番左の棒は元々 rainbow() の赤い原色に alpha=0.4 を設定したもの。先のコードで RGB=(255, 153, 153) の不透明色に変換されたので EPS 保存時にも消えなかった。
<< 簡易カラーチャート作成機として使う
実行環境まとめ(PostGIS 更新) >>
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。