電子書籍の厳選無料作品が豊富!

縦軸、横軸がそれぞれ256で、そこに256X256のデータが入っています。

この時、データの値を高さとした場合、256X256の画面に
色の違いで高さを表示した画像を作りたいと思っています。

エクセルでも等高線というのを使えば書けるみたいですが
高さのステップがかなりおおまかなため、もっと高さを
細かく表示できればいいなと思っています。

フリーのソフトでこういう事ができるものってありますか?
フリーじゃなければたくさんありそうな気がしますが。。。

あと手元には、エクセル、オリジンがありますが、
これらでも細かく高さ表示できる方法ってありますか?
よろしくお願いします。

A 回答 (6件)

#2です。


なんか他サイトに丸投げだったんでコメントしておきます。

データがエクセルにあるなら、
・新規シートのA1:IV256に256x256のデータのみをコピー&ペースト。
・「名前をつけて保存」ファイルの種類「テキスト(タブ区切り)」で任意の名前(ここではBook1.txt)をつけて保存先をRの実行フォルダ(C:\Program Files\R\rw2001)に保存(状況によって多少異なる)。

Rを起動。
以下のスクリプトを入力。

x <- array(1:256)
y <- array(1:256)
tmp <- read.table("Book1.txt")
z <- data.matrix(tmp)
image(x,y,z,col=terrain.colors(500),axis=FALSE)

//3行目のBook1.txtはエクセルで保存したファイル名を入力
//5行目terrain.colos(500)は色数なので好みによって増減させる。

こんなところです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
無事、欲しかった図を得る事ができました。

できれば以下のことも出来たらいいなと思っています。

(1)どの色がどの高さなのかを表すバーのようなものが欲しい。
No.1の方の補足にした例でいうと

△2

●0

こんな感じの縦長のバーで、最大値と最小値に値が振られている。

(2)最大値の時の色と最小値の色を設定することができ、
中間値はそのグラデーションにしたい。

もし時間があればご回答よろしくお願いします。

お礼日時:2005/02/28 15:34

#4のご質問について



いろいろ調べましたが黒枠を消す方法についてはわかりません。

あえてカラーバーを作るなら、単純増加の数列のデータファイルを別に作って、それを処理にかけることによって得られるグラデーション画像をうまく切り取って、ラベル付けしてカラーバーにする方法くらいしか思いつきません。

私のできることはここまでです。
    • good
    • 0
この回答へのお礼

やはり黒枠は無理なんですね。
黒枠がない方が見た目が綺麗かな?と思っただけなので
あっても特に問題があるわけではありませんが。。。

今回はこれで締め切ろうと思いますが、
また何か疑問が出てきたらまた質問しようと思いますので
その時はよろしくお願いいたします。

お礼日時:2005/03/01 09:30

(2)について回答



convert16<-function(n){
q=n%/%16
r=n%%16
if(q==10) q <- "A"
if(q==11) q <- "B"
if(q==12) q <- "C"
if(q==13) q <- "D"
if(q==14) q <- "E"
if(q==15) q <- "F"
if(r==10) r <- "A"
if(r==11) r <- "B"
if(r==12) r <- "C"
if(r==13) r <- "D"
if(r==14) r <- "E"
if(r==15) r <- "F"
tmp=paste(q,r,sep="")
return(tmp)
}

gradation<-function(r1,g1,b1,r2,g2,b2,n){
rgb=0
for(i in 1:n){
r=(r1*(n-i)+r2*i)%/%n
g=(g1*(n-i)+g2*i)%/%n
b=(b1*(n-i)+b2*i)%/%n
rgb[i]=paste("#",convert16(r),convert16(g),convert16(b),sep="")
}
return(rgb)
}

を最初に入力(コピー&ペーストで可)。


#3の五行目を

filled.contour(x,y,z,level=seq(0,1000,by=50),col=gradation(255,0,0,255,255,255,20),axes=FALSE,key.axes=axis(4,seq(0,1000,by=1000)))

に変更。
これについて解説。
level=seq(0,1000,by=50)は順に、最小値、最大値、いくつごとに色を変えるか。
gradation(255,0,0,255,255,255,20)は順に、開始色のR値、G値、B値、終了色のR値、G値、B値、グラデーション色数。
levelの「いくつごとに色を変えるか」の数値とグラデーション色数の積がおよそ(最大値-最小値)になっている必要がある。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
グラデーションも可能だと知って驚きました。
ただ色のつけ方がかなり難しそうですね。。。
思ったような色分布にならないので。。。
でもすぐにこういう式が思い浮かぶってことは、
かなりRにお詳しいんですね。

お礼日時:2005/03/01 09:24

とりあえず(1)にお答えしておきます。


#3の五行目image(・・・)の代わりに
filled.contour(x,y,z,color=terrain.colors,axes=FALSE,key.axes=axis(4,seq(0,1000,by=1000)))
を入力してください。
最小値と最大値は最後のseq(0,1000,by=1000)のところを変えてください。順に最小値、最大値、ステップ幅です。
ちなみに、#3でaxis=となっていたのはaxes=の間違いでした。
    • good
    • 0
この回答へのお礼

何度もご回答ありがとうございました。
私の理想どおりの図を描く事ができたので、大変満足しています。
また無理なお願いなんですが、これで表示させた高さのバーは
黒枠が表示されているのですがこれって消せないでしょうか?
(黒枠がない方が格好よく見えるので。。。)
よろしくお願いします。

お礼日時:2005/02/28 18:05

こういうのは、画像ソフトでなくて、統計処理ソフトなどを使います。


フリーの統計処理ソフトにRというものがあります。
これでやることとしましょう。

http://www.okada.jp.org/RWiki/index.php?R%20%A4% …
↑を参考にRをインストール。

等高線図・濃淡図の作り方については
http://www.okada.jp.org/RWiki/index.php?cmd=read …
↑にあります。
    • good
    • 0
この回答へのお礼

画像ソフトじゃなくて統計処理ソフトを使うんですね。

Rをインストールしたのですが、使い方がよくわかっていないのと、
256×256データから濃淡図?を作る方法がよくわかりません。
もう少し簡単に作成できるソフトがあったら教えて下さい。

お礼日時:2005/02/28 15:19

ここでの<256X256のデータ>と<256X256の画面>と言うのが同じものなのかまったく別の値と画像のデータがあるのかわかりませんが、表が作成したいと言ううことで良いのでしょうか?それであればここにありますよ。

http://www.vector.co.jp/vpack/filearea/win95/edu …
ちなみに画像を作成して今ある画像にメモリを入れたいと言うのであれば大抵の画像ソフトで画像サイズは決められますから、作って貼り付けるのが一番簡単だと思います。

この回答への補足

説明不足で分かりずらくなって申し訳ありません。

例えば、4x4のデータがあるとします。

1 0 1 2
1 2 1 0
2 0 0 1
2 2 2 0

0を●、1を□、2を△とした場合
(本当は●や□じゃなくて色によって分けたい)

□●□△
□△□●
△●●□
△△△●

こんな感じのグラフを書きたいと思っています。
(0は赤色、1は赤+黄色、2は黄色って感じで)

数値は1~1000ぐらいあるので、色の変化が
たくさんある方がいいと思っています。

まだ分かりにくいかもしれませんが、疑問がありましたら
補足しますのでよろしくお願いします。

補足日時:2005/02/28 14:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!