- ベストアンサー
フリーの画像ソフトで色の違いで高さを表示する画像を作成する方法
- フリーの画像ソフトを使用して、縦軸と横軸が256のデータを持つ256x256の画面に色の違いで高さを表示する画像を作成する方法を教えてください。
- エクセルでは等高線を使用して高さを表示することができますが、高さのステップが大まかになってしまいます。より細かく高さを表示できるフリーのソフトはありますか?
- 手元にはエクセルとオリジンがありますが、これらでも細かく高さを表示できる方法はありますか?
- みんなの回答 (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)は色数なので好みによって増減させる。 こんなところです。
その他の回答 (5)
- KanjistX
- ベストアンサー率55% (48/86)
#4のご質問について いろいろ調べましたが黒枠を消す方法についてはわかりません。 あえてカラーバーを作るなら、単純増加の数列のデータファイルを別に作って、それを処理にかけることによって得られるグラデーション画像をうまく切り取って、ラベル付けしてカラーバーにする方法くらいしか思いつきません。 私のできることはここまでです。
お礼
やはり黒枠は無理なんですね。 黒枠がない方が見た目が綺麗かな?と思っただけなので あっても特に問題があるわけではありませんが。。。 今回はこれで締め切ろうと思いますが、 また何か疑問が出てきたらまた質問しようと思いますので その時はよろしくお願いいたします。
- KanjistX
- ベストアンサー率55% (48/86)
(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の「いくつごとに色を変えるか」の数値とグラデーション色数の積がおよそ(最大値-最小値)になっている必要がある。
お礼
ご回答ありがとうございました。 グラデーションも可能だと知って驚きました。 ただ色のつけ方がかなり難しそうですね。。。 思ったような色分布にならないので。。。 でもすぐにこういう式が思い浮かぶってことは、 かなりRにお詳しいんですね。
- KanjistX
- ベストアンサー率55% (48/86)
とりあえず(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=の間違いでした。
お礼
何度もご回答ありがとうございました。 私の理想どおりの図を描く事ができたので、大変満足しています。 また無理なお願いなんですが、これで表示させた高さのバーは 黒枠が表示されているのですがこれって消せないでしょうか? (黒枠がない方が格好よく見えるので。。。) よろしくお願いします。
- KanjistX
- ベストアンサー率55% (48/86)
こういうのは、画像ソフトでなくて、統計処理ソフトなどを使います。 フリーの統計処理ソフトにRというものがあります。 これでやることとしましょう。 http://www.okada.jp.org/RWiki/index.php?R%20%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB ↑を参考にRをインストール。 等高線図・濃淡図の作り方については http://www.okada.jp.org/RWiki/index.php?cmd=read&page=%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%BB%B2%B9%CD%BC%C2%CE%E3%BD%B8%A1%A7%A5%A4%A5%E1%A1%BC%A5%B8%BF%DE&word=%C5%F9%B9%E2%C0%FE#content_1_5 ↑にあります。
お礼
画像ソフトじゃなくて統計処理ソフトを使うんですね。 Rをインストールしたのですが、使い方がよくわかっていないのと、 256×256データから濃淡図?を作る方法がよくわかりません。 もう少し簡単に作成できるソフトがあったら教えて下さい。
- yu--u
- ベストアンサー率10% (16/149)
ここでの<256X256のデータ>と<256X256の画面>と言うのが同じものなのかまったく別の値と画像のデータがあるのかわかりませんが、表が作成したいと言ううことで良いのでしょうか?それであればここにありますよ。http://www.vector.co.jp/vpack/filearea/win95/edu/math/index.html ちなみに画像を作成して今ある画像にメモリを入れたいと言うのであれば大抵の画像ソフトで画像サイズは決められますから、作って貼り付けるのが一番簡単だと思います。
補足
説明不足で分かりずらくなって申し訳ありません。 例えば、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ぐらいあるので、色の変化が たくさんある方がいいと思っています。 まだ分かりにくいかもしれませんが、疑問がありましたら 補足しますのでよろしくお願いします。
お礼
ご回答ありがとうございました。 無事、欲しかった図を得る事ができました。 できれば以下のことも出来たらいいなと思っています。 (1)どの色がどの高さなのかを表すバーのようなものが欲しい。 No.1の方の補足にした例でいうと △2 □ ●0 こんな感じの縦長のバーで、最大値と最小値に値が振られている。 (2)最大値の時の色と最小値の色を設定することができ、 中間値はそのグラデーションにしたい。 もし時間があればご回答よろしくお願いします。